|  |  | @ -1,5 +1,5 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | import os |  |  |  | import os | 
			
		
	
		
		
			
				
					
					|  |  |  | from .base import Command, Prompt |  |  |  | from .base import Command, MultipleCommands, Prompt | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def append(path, content=None, **kwargs): |  |  |  | def append(path, content=None, **kwargs): | 
			
		
	
	
		
		
			
				
					|  |  | @ -111,7 +111,7 @@ def directory(path, group=None, mode=None, owner=None, recursive=True, **kwargs) | 
			
		
	
		
		
			
				
					
					|  |  |  |     - recursive (bool): Create all directories along the path. |  |  |  |     - recursive (bool): Create all directories along the path. | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     """ |  |  |  |     """ | 
			
		
	
		
		
			
				
					
					|  |  |  |     kwargs.setdefault("comment", "create directory %s" % path) |  |  |  |     comment = kwargs.pop("comment", "create directory %s" % path) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     statement = ["mkdir"] |  |  |  |     statement = ["mkdir"] | 
			
		
	
		
		
			
				
					
					|  |  |  |     if mode is not None: |  |  |  |     if mode is not None: | 
			
		
	
	
		
		
			
				
					|  |  | @ -122,23 +122,34 @@ def directory(path, group=None, mode=None, owner=None, recursive=True, **kwargs) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     statement.append(path) |  |  |  |     statement.append(path) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     mkdir = Command(" ".join(statement), comment=comment, **kwargs) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     chgrp = None | 
			
		
	
		
		
			
				
					
					|  |  |  |     if group: |  |  |  |     if group: | 
			
		
	
		
		
			
				
					
					|  |  |  |         if recursive: |  |  |  |         if recursive: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("&& chgrp -R %s" % group) |  |  |  |             chgrp = Command("chgrp -R %s %s" % (group, path), comment="set %s group on %s" % (group, path), **kwargs) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |         else: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("&& chgrp %s" % group) |  |  |  |             chgrp = Command("chgrp %s %s" % (group, path), comment="set %s group on %s" % (group, path), **kwargs) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(path) |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     chown = None | 
			
		
	
		
		
			
				
					
					|  |  |  |     if owner: |  |  |  |     if owner: | 
			
		
	
		
		
			
				
					
					|  |  |  |         if recursive: |  |  |  |         if recursive: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("&& chown -R %s" % owner) |  |  |  |             chown = Command("chown -R %s %s" % (owner, path), comment="set %s owner on %s" % (owner, path), **kwargs) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |         else: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("&& chown %s" % owner) |  |  |  |             chown = Command("chown %s %s" % (owner, path), comment="set %s owner on %s" % (owner, path), **kwargs) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(path) |  |  |  |     commands = list() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     commands.append(mkdir) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if chgrp is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         commands.append(chgrp) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return Command(" ".join(statement), **kwargs) |  |  |  |     if chown is not None: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         commands.append(chown) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if len(commands) == 1: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return commands[0] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return MultipleCommands(commands, comment=comment) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def extract(from_path, absolute=False, exclude=None, strip=None, to_path=None, view=False, **kwargs): |  |  |  | def extract(from_path, absolute=False, exclude=None, strip=None, to_path=None, view=False, **kwargs): | 
			
		
	
	
		
		
			
				
					|  |  | @ -224,50 +235,58 @@ def perms(path, group=None, mode=None, owner=None, recursive=False, **kwargs): | 
			
		
	
		
		
			
				
					
					|  |  |  |     - recursive: Create all directories along the path. |  |  |  |     - recursive: Create all directories along the path. | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     """ |  |  |  |     """ | 
			
		
	
		
		
			
				
					
					|  |  |  |     commands = list() |  |  |  |     comment = kwargs.pop("comment", "set permissions on %s" % path) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     kwargs['comment'] = "set permissions on %s" % path |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     chgrp = None | 
			
		
	
		
		
			
				
					
					|  |  |  |     if group is not None: |  |  |  |     if group is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement = ["chgrp"] |  |  |  |         a = ["chgrp"] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if recursive: |  |  |  |         if recursive: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("-R") |  |  |  |             a.append("-R") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(group) |  |  |  |         a.append(group) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(path) |  |  |  |         a.append(path) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         commands.append(Command(" ".join(statement), **kwargs)) |  |  |  |         chgrp = Command(" ".join(a), comment="set %s group on %s" % (group, path), **kwargs) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if owner is not None: |  |  |  |     chmod = None | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         statement = ["chown"] |  |  |  |     if mode is not None: | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         a = ["chmod"] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if recursive: |  |  |  |         if recursive: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("-R") |  |  |  |             a.append("-R") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(owner) |  |  |  |         a.append(mode) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(path) |  |  |  |         a.append(path) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         commands.append(Command(" ".join(statement), **kwargs)) |  |  |  |         chmod = Command(" ".join(a), comment="set %s mode on %s" % (mode, path), **kwargs) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if mode is not None: |  |  |  |     chown = None | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         statement = ["chmod"] |  |  |  |     if owner is not None: | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         a = ["chown"] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if recursive: |  |  |  |         if recursive: | 
			
		
	
		
		
			
				
					
					|  |  |  |             statement.append("-R") |  |  |  |             a.append("-R") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         a.append(owner) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         a.append(path) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(str(mode)) |  |  |  |         chown = Command(" ".join(a), comment="set %s owner on %s" % (owner, path), **kwargs) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         statement.append(path) |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         commands.append(Command(" ".join(statement), **kwargs)) |  |  |  |     commands = list() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if chgrp is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         commands.append(chgrp) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     kwargs.setdefault("comment", "set permissions on %s" % path) |  |  |  |     if chmod is not None: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         commands.append(chmod) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     a = list() |  |  |  |     if chown is not None: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     for c in commands: |  |  |  |         commands.append(chown) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         a.append(c.get_statement(include_comment=True)) |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return Command("\n".join(a), **kwargs) |  |  |  |     if len(commands) == 1: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return commands[0] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return MultipleCommands(commands, comment=comment, **kwargs) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def prompt(name, back_title="Input", choices=None, default=None, dialog=False, help_text=None, label=None, **kwargs): |  |  |  | def prompt(name, back_title="Input", choices=None, default=None, dialog=False, help_text=None, label=None, **kwargs): | 
			
		
	
	
		
		
			
				
					|  |  | @ -394,7 +413,9 @@ def rsync(source, target, delete=False, exclude=None, host=None, key_file=None, | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     tokens = list() |  |  |  |     tokens = list() | 
			
		
	
		
		
			
				
					
					|  |  |  |     tokens.append("rsync") |  |  |  |     tokens.append("rsync") | 
			
		
	
		
		
			
				
					
					|  |  |  |     tokens.append("--cvs-exclude") |  |  |  |     # BUG: Providing rsync --cvs-exclude was causing directories named "tags" to be omitted. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     # tokens.append("--cvs-exclude") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     tokens.append("--exclude=.git") | 
			
		
	
		
		
			
				
					
					|  |  |  |     tokens.append("--checksum") |  |  |  |     tokens.append("--checksum") | 
			
		
	
		
		
			
				
					
					|  |  |  |     tokens.append("--compress") |  |  |  |     tokens.append("--compress") | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |