|  |  |  | @ -21,6 +21,9 @@ except: | 
			
		
	
		
			
				
					|  |  |  |  |     print >>sys.stderr, "Newer subprocess module does not exist, using older interfaces." | 
			
		
	
		
			
				
					|  |  |  |  |   has_subprocess = False | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | # Files, directories, and filename utilities | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def mcd(subdir): | 
			
		
	
		
			
				
					|  |  |  |  |   # Assuming we have GNU coreutils' mkdir | 
			
		
	
		
			
				
					|  |  |  |  |   mkdir("-p", subdir) | 
			
		
	
	
		
			
				
					|  |  |  | @ -47,6 +50,35 @@ def provide_link(dest, src): | 
			
		
	
		
			
				
					|  |  |  |  |     os.symlink(src, dest.rstrip("/")) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | # The following 3 routines are from | 
			
		
	
		
			
				
					|  |  |  |  | # http://code.activestate.com/recipes/208993-compute-relative-path-from-one-directory-to-anothe/ | 
			
		
	
		
			
				
					|  |  |  |  | # by Cimarron Taylor | 
			
		
	
		
			
				
					|  |  |  |  | # (PSF license) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def _pathsplit(p, rest=[]): | 
			
		
	
		
			
				
					|  |  |  |  |   (h,t) = os.path.split(p) | 
			
		
	
		
			
				
					|  |  |  |  |   if len(h) < 1: return [t]+rest | 
			
		
	
		
			
				
					|  |  |  |  |   if len(t) < 1: return [h]+rest | 
			
		
	
		
			
				
					|  |  |  |  |   return _pathsplit(h,[t]+rest) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def _commonpath(l1, l2, common=[]): | 
			
		
	
		
			
				
					|  |  |  |  |   if len(l1) < 1: return (common, l1, l2) | 
			
		
	
		
			
				
					|  |  |  |  |   if len(l2) < 1: return (common, l1, l2) | 
			
		
	
		
			
				
					|  |  |  |  |   if l1[0] != l2[0]: return (common, l1, l2) | 
			
		
	
		
			
				
					|  |  |  |  |   return _commonpath(l1[1:], l2[1:], common+[l1[0]]) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def relpath(p1, p2): | 
			
		
	
		
			
				
					|  |  |  |  |   """Computes the relative path of p2 with respect to p1.""" | 
			
		
	
		
			
				
					|  |  |  |  |   (common,l1,l2) = _commonpath(_pathsplit(p1), _pathsplit(p2)) | 
			
		
	
		
			
				
					|  |  |  |  |   p = [] | 
			
		
	
		
			
				
					|  |  |  |  |   if len(l1) > 0: | 
			
		
	
		
			
				
					|  |  |  |  |     p = [ '../' * len(l1) ] | 
			
		
	
		
			
				
					|  |  |  |  |   p = p + l2 | 
			
		
	
		
			
				
					|  |  |  |  |   return os.path.join( *p ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | # /// end code snippet | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | # Globbing utilities: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def sorted_glob(pathname):#, cmp=None, key=None, reverse=None): | 
			
		
	
	
		
			
				
					|  |  |  | 
 |