class GitUpdate(InterfaceView): """ This class provides an interface to generate an "update". Pass it a path and it will start an update, running the notification dialog. There is no glade . """ def __init__(self, paths): InterfaceView.__init__(self, "git-update", "Update") self.paths = paths self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git(paths[0]) self.repository_selector = rabbitvcs.ui.widget.GitRepositorySelector( self.get_widget("repository_container"), self.git ) def on_ok_clicked(self, widget, data=None): self.hide() merge = self.get_widget("merge").get_active() repository = self.repository_selector.repository_opt.get_active_text() branch = self.repository_selector.branch_opt.get_active_text() fetch_all = self.get_widget("all").get_active() self.action = GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Update")) self.action.append(self.action.set_status, _("Updating...")) if fetch_all: if merge: self.action.append(self.git.pull, "--all") else: self.action.append(self.git.fetch, "--all") else: if merge: self.action.append(self.git.pull, repository, branch) else: self.action.append(self.git.fetch, repository, branch) self.action.append(self.action.set_status, _("Completed Update")) self.action.append(self.action.finish) self.action.start()
class GitCreate: # Also, might want to just launch a terminal window instead of this def __init__(self, path): self.vcs = rabbitvcs.vcs.VCS() self.git = self.vcs.git() self.path = path self.action = GitAction( self.git, register_gtk_quit=True ) self.action.append(self.action.set_header, _("Initialize Repository")) self.action.append(self.action.set_status, _("Setting up repository...")) self.action.append(self.git.initialize_repository, self.path) self.action.append(self.action.set_status, _("Completed repository setup")) self.action.append(self.action.finish) self.action.start()
class GitExport(GitClone): def __init__(self, path=None, revision=None): self.vcs = rabbitvcs.vcs.VCS() self.git = None guess = rabbitvcs.vcs.guess(path) if guess["vcs"] == rabbitvcs.vcs.VCS_GIT: self.git = self.vcs.git(path) export_to = "" export_from = path else: export_to = path export_from = "" GitClone.__init__(self, export_to, export_from) self.get_widget("Checkout").set_title(_("Export - %s") % path) self.revision_selector = rabbitvcs.ui.widget.RevisionSelector( self.get_widget("revision_container"), self.git, revision=revision, url_combobox=self.repositories, expand=True ) self.get_widget("revision_selector_box").show() def on_ok_clicked(self, widget): url = self.repositories.get_active_text() path = self._get_path() if not url or not path: MessageBox(_("The repository URL and destination path are both required fields.")) return if url.startswith("file://"): url = self._parse_path(url) # Cannot do: # url = os.path.normpath(url) # ...in general, since it might be eg. an http URL. Doesn't seem to # affect pySvn though. path = os.path.normpath(path) revision = self.revision_selector.get_revision_object() self.hide() self.action = GitAction( self.git, register_gtk_quit=self.gtk_quit_is_set() ) self.action.append(self.action.set_header, _("Export")) self.action.append(self.action.set_status, _("Running Export Command...")) self.action.append(rabbitvcs.util.helper.save_repository_path, url) self.action.append( self.git.export, url, path, revision=revision ) self.action.append(self.action.set_status, _("Completed Export")) self.action.append(self.action.finish) self.action.start() def on_repositories_changed(self, widget, data=None): # Do not use quoting for this bit url = self.repositories.get_active_text() tmp = url.replace("//", "/").split("/")[1:] append = "" prev = "" while len(tmp): prev = append append = tmp.pop() if append not in ("trunk", "branches", "tags"): break if append in ("http:", "https:", "file:", "svn:", "svn+ssh:"): append = "" break self.get_widget("destination").set_text( os.path.join(self.destination, append) ) self.check_form()
class GitAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.git = self.vcs.git(path) if revision is None: revision = "HEAD" self.path = path self.get_widget("from_revision_container").hide() self.get_widget("to_show_log").hide() self.get_widget("to").set_text(str(revision)) self.table = rabbitvcs.ui.widget.Table( self.get_widget("table"), [gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING], [_("Line"), _("Revision"), _("Author"), _("Date"), _("Text")] ) self.table.allow_multiple() self.load() # # Helper methods # def load(self): to_rev = self.git.revision(self.get_widget("to").get_text()) self.action = GitAction( self.git, notification=False ) self.action.append( self.git.annotate, self.path, to_rev ) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.start() @gtk_unsafe def populate_table(self): blamedict = self.action.get_result(0) self.table.clear() for item in blamedict: self.table.append([ item["number"], item["revision"][:7], item["author"], rabbitvcs.util.helper.format_datetime(item["date"]), item["line"] ]) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: text += "%s\t%s\t%s\t%s\t%s\n" % ( item["number"], item["revision"][:7], item["author"], rabbitvcs.util.helper.format_datetime(item["date"]), item["line"] ) return text
class GitAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.git = self.vcs.git(path) if revision is None: revision = "HEAD" self.path = path self.get_widget("from_revision_container").hide() self.get_widget("to_show_log").hide() self.get_widget("to").set_text(str(revision)) self.table = rabbitvcs.ui.widget.Table(self.get_widget("table"), [ gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING ], [_("Line"), _("Revision"), _("Author"), _("Date"), _("Text")]) self.table.allow_multiple() self.load() # # Helper methods # def load(self): to_rev = self.git.revision(self.get_widget("to").get_text()) self.action = GitAction(self.git, notification=False) self.action.append(self.git.annotate, self.path, to_rev) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.start() @gtk_unsafe def populate_table(self): blamedict = self.action.get_result(0) self.table.clear() for item in blamedict: self.table.append([ item["number"], item["revision"][:7], item["author"], rabbitvcs.util.helper.format_datetime(item["date"]), item["line"] ]) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: text += "%s\t%s\t%s\t%s\t%s\n" % ( item["number"], item["revision"][:7], item["author"], rabbitvcs.util.helper.format_datetime( item["date"]), item["line"]) return text