[meld] Add new API methods to bzr
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Add new API methods to bzr
- Date: Fri, 14 Jun 2013 22:50:43 +0000 (UTC)
commit 18e70d14eded90cee6fa749215399e06ae17cf7b
Author: Louis des Landes <louis obsidian com au>
Date: Wed Jun 12 12:44:29 2013 +1000
Add new API methods to bzr
https://bugzilla.gnome.org/show_bug.cgi?id=701973
meld/vc/bzr.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 70 insertions(+), 11 deletions(-)
---
diff --git a/meld/vc/bzr.py b/meld/vc/bzr.py
index 6f83757..0c9a24a 100644
--- a/meld/vc/bzr.py
+++ b/meld/vc/bzr.py
@@ -41,6 +41,10 @@ class Vc(_vc.CachedVc):
PATCH_INDEX_RE = "^=== modified file '(.*)'.*$"
CONFLICT_RE = "conflict in (.*)$"
+ commit_statuses = (
+ _vc.STATE_MODIFIED, _vc.STATE_RENAMED, _vc.STATE_NEW, _vc.STATE_REMOVED
+ )
+
conflict_map = {
_vc.CONFLICT_BASE: '.BASE',
_vc.CONFLICT_OTHER: '.OTHER',
@@ -77,20 +81,36 @@ class Vc(_vc.CachedVc):
def diff_command(self):
return [self.CMD] + self.CMDARGS + ["diff"]
- def update_command(self):
- return [self.CMD] + self.CMDARGS + ["pull"]
-
def add_command(self):
return [self.CMD] + self.CMDARGS + ["add"]
- def remove_command(self, force=0):
- return [self.CMD] + self.CMDARGS + ["rm"]
-
- def revert_command(self):
- return [self.CMD] + self.CMDARGS + ["revert"]
-
- def resolved_command(self):
- return [self.CMD] + self.CMDARGS + ["resolve"]
+ def revert(self, runner, files):
+ runner(
+ [self.CMD] + self.CMDARGS + ["revert"] + files, [], refresh=True,
+ working_dir=self.root)
+
+ def push(self, runner):
+ runner(
+ [self.CMD] + self.CMDARGS + ["push"], [], refresh=True,
+ working_dir=self.root)
+
+ def update(self, runner, files):
+ # TODO: Handle checkouts/bound branches by calling
+ # update instead of pull. For now we've replicated existing
+ # functionality, as update will not work for unbound branches.
+ runner(
+ [self.CMD] + self.CMDARGS + ["pull"], [], refresh=True,
+ working_dir=self.root)
+
+ def resolve(self, runner, files):
+ runner(
+ [self.CMD] + self.CMDARGS + ["resolve"] + files, [], refresh=True,
+ working_dir=self.root)
+
+ def remove(self, runner, files):
+ runner(
+ [self.CMD] + self.CMDARGS + ["rm"] + files, [], refresh=True,
+ working_dir=self.root)
def valid_repo(self):
if _vc.call([self.CMD, "root"], cwd=self.root):
@@ -101,6 +121,18 @@ class Vc(_vc.CachedVc):
def get_working_directory(self, workdir):
return self.root
+ def get_files_to_commit(self, paths):
+ files = []
+ for p in paths:
+ if os.path.isdir(p):
+ entries = self._lookup_tree_cache(p)
+ names = [
+ x for x, y in entries.items() if y in self.commit_statuses]
+ files.extend(names)
+ else:
+ files.append(os.path.relpath(p, self.root))
+ return sorted(list(set(files)))
+
def _lookup_tree_cache(self, rootdir):
branch_root = _vc.popen(
[self.CMD] + self.CMDARGS + ["root", rootdir]).read().rstrip('\n')
@@ -189,3 +221,30 @@ class Vc(_vc.CachedVc):
# bzr paths are all temporary files
return "%s%s" % (path, self.conflict_map[conflict]), False
+
+ # Sensitivity button mappings.
+ def update_actions_for_paths(self, path_states, actions):
+ states = path_states.values()
+
+ actions["VcCompare"] = bool(path_states)
+ # TODO: We can't disable this for NORMAL, because folders don't
+ # inherit any state from their children, but committing a folder with
+ # modified children is expected behaviour.
+ actions["VcCommit"] = all(s not in (
+ _vc.STATE_NONE, _vc.STATE_IGNORED) for s in states)
+
+ actions["VcUpdate"] = True
+ # TODO: We can't do this; this shells out for each selection change...
+ # actions["VcPush"] = bool(self.get_commits_to_push())
+ actions["VcPush"] = True
+
+ actions["VcAdd"] = all(s not in (
+ _vc.STATE_NORMAL, _vc.STATE_REMOVED) for s in states)
+ actions["VcResolved"] = all(s == _vc.STATE_CONFLICT for s in states)
+ actions["VcRemove"] = (all(s not in (
+ _vc.STATE_NONE, _vc.STATE_IGNORED,
+ _vc.STATE_REMOVED) for s in states) and
+ self.root not in path_states.keys())
+ actions["VcRevert"] = all(s not in (
+ _vc.STATE_NONE, _vc.STATE_NORMAL,
+ _vc.STATE_IGNORED) for s in states)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]