From f108f5a0fb0984c0daccd8be72ea0ffa309b3fff Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Tue, 17 Nov 2009 09:47:44 -0500 Subject: Use unicode_output=False in some Darcs._u_invoke_client() calls. This avoids the following error: ====================================================================== ERROR: Should get file contents as committed to specified revision. ---------------------------------------------------------------------- Traceback (most recent call last): File ".../libbe/vcs.py", line 860, in test_revision_file_contents_as_committed full_path, revision) File ".../libbe/vcs.py", line 339, in get_file_contents contents = self._vcs_get_file_contents(relpath,revision,binary=binary) File ".../libbe/darcs.py", line 122, in _vcs_get_file_contents status,output,error = self._u_invoke(args, stdin=major_patch) File ".../libbe/vcs.py", line 488, in _u_invoke raise CommandError(args, status, stdout, stderr) CommandError: Command failed (2): patch: **** Only garbage was found in the patch input. while executing ['patch', '--reverse', 'a/text'] After adding the unicode_output=False lines, I adjusted the VCS._u_invoke_client() definition to pass all it's kwargs automatically through to VCS._u_invoke(). To make this simpler and more consistent, I renamed the "directory" option to "cwd", and adjusted *._u_invoke() calls appropriately in several VCS backends. --- libbe/arch.py | 12 ++++++------ libbe/bzr.py | 2 +- libbe/darcs.py | 8 +++++--- libbe/git.py | 9 ++++----- libbe/hg.py | 4 ++-- libbe/vcs.py | 5 +---- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/libbe/arch.py b/libbe/arch.py index daa8ac6..98c4edd 100644 --- a/libbe/arch.py +++ b/libbe/arch.py @@ -83,7 +83,7 @@ class Arch(vcs.VCS): self._archive_dir = "/tmp/%s" % trailer self._tmp_archive = True self._u_invoke_client("make-archive", self._archive_name, - self._archive_dir, directory=path) + self._archive_dir, cwd=path) def _invoke_client(self, *args, **kwargs): """ Invoke the client on our archive. @@ -121,7 +121,7 @@ class Arch(vcs.VCS): version = "0.1" self._project_name = "%s--%s--%s" % (category, branch, version) self._invoke_client("archive-setup", self._project_name, - directory=path) + cwd=path) self._tmp_project = True def _remove_project(self): assert self._tmp_project == True @@ -164,10 +164,10 @@ class Arch(vcs.VCS): # http://regexps.srparish.net/tutorial-tla/new-source.html # http://regexps.srparish.net/tutorial-tla/importing-first.html self._invoke_client("init-tree", self._project_name, - directory=path) + cwd=path) self._adjust_naming_conventions(path) self._invoke_client("import", "--summary", "Began versioning", - directory=path) + cwd=path) def _vcs_cleanup(self): if self._tmp_project == True: self._remove_project() @@ -198,7 +198,7 @@ class Arch(vcs.VCS): assert self._archive_name != None def _get_archive_project_name(self, root): # get project names - status,output,error = self._u_invoke_client("tree-version", directory=root) + status,output,error = self._u_invoke_client("tree-version", cwd=root) # e.g output # jdoe@example.com--bugs-everywhere-auto-2008.22.24.52/be--mainline--0.1 archive_name,project_name = output.rstrip('\n').split('/') @@ -266,7 +266,7 @@ class Arch(vcs.VCS): vcs.VCS._vcs_duplicate_repo(self, directory, revision) else: status,output,error = \ - self._u_invoke_client("get", revision,directory) + self._u_invoke_client("get", revision, directory) def _vcs_commit(self, commitfile, allow_empty=False): if allow_empty == False: # arch applies empty commits without complaining, so check first diff --git a/libbe/bzr.py b/libbe/bzr.py index ed9e032..8e91d0c 100644 --- a/libbe/bzr.py +++ b/libbe/bzr.py @@ -49,7 +49,7 @@ class Bzr(vcs.VCS): status,output,error = self._u_invoke_client("root", path) return output.rstrip('\n') def _vcs_init(self, path): - self._u_invoke_client("init", directory=path) + self._u_invoke_client("init", cwd=path) def _vcs_get_user_id(self): status,output,error = self._u_invoke_client("whoami") return output.rstrip('\n') diff --git a/libbe/darcs.py b/libbe/darcs.py index 9115886..6bf0119 100644 --- a/libbe/darcs.py +++ b/libbe/darcs.py @@ -60,7 +60,7 @@ class Darcs(vcs.VCS): return None return os.path.dirname(darcs_dir) def _vcs_init(self, path): - self._u_invoke_client("init", directory=path) + self._u_invoke_client("init", cwd=path) def _vcs_get_user_id(self): # following http://darcs.net/manual/node4.html#SECTION00410030000000000000 # as of June 29th, 2009 @@ -107,10 +107,12 @@ class Darcs(vcs.VCS): # Darcs versions < 2.0.0pre2 lack the "show contents" command status,output,error = self._u_invoke_client( \ - "diff", "--unified", "--from-patch", revision, path) + "diff", "--unified", "--from-patch", revision, path, + unicode_output=False) major_patch = output status,output,error = self._u_invoke_client( \ - "diff", "--unified", "--patch", revision, path) + "diff", "--unified", "--patch", revision, path, + unicode_output=False) target_patch = output # "--output -" to be supported in GNU patch > 2.5.9 diff --git a/libbe/git.py b/libbe/git.py index 628f9b9..781a278 100644 --- a/libbe/git.py +++ b/libbe/git.py @@ -50,12 +50,12 @@ class Git(vcs.VCS): if os.path.isdir(path) != True: path = os.path.dirname(path) status,output,error = self._u_invoke_client("rev-parse", "--git-dir", - directory=path) + cwd=path) gitdir = os.path.join(path, output.rstrip('\n')) dirname = os.path.abspath(os.path.dirname(gitdir)) return dirname def _vcs_init(self, path): - self._u_invoke_client("init", directory=path) + self._u_invoke_client("init", cwd=path) def _vcs_get_user_id(self): status,output,error = \ self._u_invoke_client("config", "user.name", expect=(0,1)) @@ -102,9 +102,8 @@ class Git(vcs.VCS): if revision==None: vcs.VCS._vcs_duplicate_repo(self, directory, revision) else: - #self._u_invoke_client("archive", revision, directory) # makes tarball - self._u_invoke_client("clone", "--no-checkout",".",directory) - self._u_invoke_client("checkout", revision, directory=directory) + self._u_invoke_client("clone", "--no-checkout", ".", directory) + self._u_invoke_client("checkout", revision, cwd=directory) def _vcs_commit(self, commitfile, allow_empty=False): args = ['commit', '--all', '--file', commitfile] if allow_empty == True: diff --git a/libbe/hg.py b/libbe/hg.py index 7cd4c2f..40739b6 100644 --- a/libbe/hg.py +++ b/libbe/hg.py @@ -45,10 +45,10 @@ class Hg(vcs.VCS): return True return False def _vcs_root(self, path): - status,output,error = self._u_invoke_client("root", directory=path) + status,output,error = self._u_invoke_client("root", cwd=path) return output.rstrip('\n') def _vcs_init(self, path): - self._u_invoke_client("init", directory=path) + self._u_invoke_client("init", cwd=path) def _vcs_get_user_id(self): status,output,error = self._u_invoke_client("showconfig","ui.username") return output.rstrip('\n') diff --git a/libbe/vcs.py b/libbe/vcs.py index 59dcaf8..ba23858 100644 --- a/libbe/vcs.py +++ b/libbe/vcs.py @@ -488,12 +488,9 @@ class VCS(object): raise CommandError(args, status, stdout, stderr) return status, stdout, stderr def _u_invoke_client(self, *args, **kwargs): - directory = kwargs.get('directory',None) - expect = kwargs.get('expect', (0,)) - stdin = kwargs.get('stdin', None) cl_args = [self.client] cl_args.extend(args) - return self._u_invoke(cl_args, stdin=stdin,expect=expect,cwd=directory) + return self._u_invoke(cl_args, **kwargs) def _u_search_parent_directories(self, path, filename): """ Find the file (or directory) named filename in path or in any -- cgit