From 0b16cbb8c4da3aa0362e0fa1e76fc40b5cc1b7e1 Mon Sep 17 00:00:00 2001 From: David Stanek Date: Sun, 12 Apr 2015 15:23:50 -0400 Subject: [PATCH] Refactor: move getRepo out of the App object The getRepo method really doesn't have much to do with the application object. Since it's really a utiltiy method for dealing with git repos I've moved it to gertty.gitrepo. Change-Id: Ic3349430c456ee184bbf57b6e5b7de4f940b4cc1 --- gertty/app.py | 11 ++--------- gertty/gitrepo.py | 6 ++++++ gertty/sync.py | 6 +++--- gertty/view/change.py | 5 +++-- gertty/view/diff.py | 3 ++- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/gertty/app.py b/gertty/app.py index 37e3e55..47f90ba 100644 --- a/gertty/app.py +++ b/gertty/app.py @@ -522,13 +522,6 @@ class App(object): view = view_change_list.ChangeListView(self, d['query'], d['name']) self.changeScreen(view) - def getRepo(self, project_name): - local_path = os.path.join(self.config.git_root, project_name) - local_root = os.path.abspath(self.config.git_root) - assert os.path.commonprefix((local_root, local_path)) == local_root - return gitrepo.Repo(self.config.url+'p/'+project_name, - local_path) - def openURL(self, url): self.log.debug("Open URL %s" % url) webbrowser.open_new_tab(url) @@ -578,7 +571,7 @@ class App(object): return ret def localCheckoutCommit(self, project_name, commit_sha): - repo = self.getRepo(project_name) + repo = gitrepo.get_repo(project_name, self.config) try: repo.checkout(commit_sha) dialog = mywid.MessageDialog('Checkout', 'Change checked out in %s' % repo.path) @@ -591,7 +584,7 @@ class App(object): self.popup(dialog, min_height=min_height) def localCherryPickCommit(self, project_name, commit_sha): - repo = self.getRepo(project_name) + repo = gitrepo.get_repo(project_name, self.config) try: repo.cherryPick(commit_sha) dialog = mywid.MessageDialog('Cherry-Pick', 'Change cherry-picked in %s' % repo.path) diff --git a/gertty/gitrepo.py b/gertty/gitrepo.py index 62d5ba2..59e4616 100644 --- a/gertty/gitrepo.py +++ b/gertty/gitrepo.py @@ -507,3 +507,9 @@ class Repo(object): f.addContextLine(line) f.finalize() return f + +def get_repo(project_name, config): + local_path = os.path.join(config.git_root, project_name) + local_root = os.path.abspath(config.git_root) + assert os.path.commonprefix((local_root, local_path)) == local_root + return Repo(config.url+'p/'+project_name, local_path) diff --git a/gertty/sync.py b/gertty/sync.py index 1735cd2..346165a 100644 --- a/gertty/sync.py +++ b/gertty/sync.py @@ -567,7 +567,7 @@ class SyncChangeTask(Task): change.subject = remote_change['subject'] change.updated = dateutil.parser.parse(remote_change['updated']) change.topic = remote_change.get('topic') - repo = app.getRepo(change.project.name) + repo = gertty.gitrepo.get_repo(change.project.name, app.config) new_revision = False for remote_commit, remote_revision in remote_change.get('revisions', {}).items(): revision = session.getRevisionByCommit(remote_commit) @@ -847,7 +847,7 @@ class CheckReposTask(Task): try: missing = False try: - app.getRepo(project.name) + repo = gertty.gitrepo.get_repo(project.name, app.config) except gitrepo.GitCloneError: missing = True if missing or app.fetch_missing_refs: @@ -878,7 +878,7 @@ class CheckRevisionsTask(Task): project = session.getProject(self.project_key) repo = None try: - repo = app.getRepo(project.name) + repo = gitrepo.get_repo(project.name, app.config) except gitrepo.GitCloneError: pass for change in project.open_changes: diff --git a/gertty/view/change.py b/gertty/view/change.py index 7f401df..7c89964 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -19,6 +19,7 @@ import urlparse import urwid +from gertty import gitrepo from gertty import keymap from gertty import mywid from gertty import sync @@ -504,7 +505,7 @@ class ChangeView(urwid.WidgetWrap): change = session.getChange(self.change_key) change_number = change.number change_id = change.id - repo = self.app.getRepo(change.project.name) + repo = gitrepo.get_repo(change.project.name, self.app.config) for revision in change.revisions: if not repo.hasCommit(revision.parent): missing_revisions.add(revision.parent) @@ -626,7 +627,7 @@ class ChangeView(urwid.WidgetWrap): self.refreshDependencies(session, change) - repo = self.app.getRepo(change.project.name) + repo = gitrepo.get_repo(change.project.name, self.app.config) # The listbox has both revisions and messages in it (and # may later contain the vote table and change header), so # keep track of the index separate from the loop. diff --git a/gertty/view/diff.py b/gertty/view/diff.py index 3150bb0..976445a 100644 --- a/gertty/view/diff.py +++ b/gertty/view/diff.py @@ -17,6 +17,7 @@ import logging import urwid +from gertty import gitrepo from gertty import keymap from gertty import mywid from gertty import gitrepo @@ -252,7 +253,7 @@ class BaseDiffView(urwid.WidgetWrap): comment_list.append((comment.key, message)) comment_lists[key] = comment_list comment_filenames.add(path) - repo = self.app.getRepo(self.project_name) + repo = gitrepo.get_repo(self.project_name, self.app.config) self._w.contents.append((self.app.header, ('pack', 1))) self.file_reminder = self.makeFileReminder() self._w.contents.append((self.file_reminder, ('pack', 1)))