class SVNAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.svn = self.vcs.svn() self.path = path self.show_revision(forceload=True) # # Helper methods # def load(self, revision): revision = revision.lower() rev = self.svn.revision("HEAD") if revision.isdigit(): rev = self.svn.revision("number", number=int(revision)) self.launch_loading() self.action = SVNAction(self.svn, notification=False) self.action.append(self.svn.annotate, self.path, to_revision=rev) if not self.log_by_order: self.action.append(self.svn.log, self.path) self.action.append(self.set_log) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.schedule() self.kill_loading() def blame_info(self, item): revision = item["revision"].number if revision <= 0: return ("", "", "") revision = str(revision) # remove fractional seconds and timezone information from # the end of the string provided by pysvn: # * timezone should be always "Z" (for UTC), "%Z" is not yet # yet supported by strptime # * fractional could be parsed with "%f" since python 2.6 # but this precision is not needed anyway # * the datetime module does not include strptime until python 2.4 # so this workaround is required for now datestr = item["date"][0:-8] try: date = datetime(*time.strptime(datestr, "%Y-%m-%dT%H:%M:%S")[:-2]) date = helper.format_datetime(date, self.datetime_format) except: date = "" return revision, date, S(item["author"].strip()) def populate_table(self): blamedict = self.action.get_result(0) lines = highlight(self.path, [item["line"] for item in blamedict]) self.table.clear() for i, item in enumerate(blamedict): revision, date, author = self.blame_info(item) author_color = self.author_background.get(author, "#FFFFFF") try: revision_color = self.log_by_revision[revision].background except KeyError: revision_color = "#FFFFFF" self.table.append([ revision, author, date, str(int(item["number"]) + 1), lines[i], revision_color, author_color ]) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: revision, date, author = self.blame_info(item) text += "%s\t%s\t%s\t%s\t%s\n" % (str(int(item["number"]) + 1), revision, author, date, item["line"]) return text def short_revision(self, revision): revision = str(revision).lower() return revision if revision != "head" else "HEAD"
class SVNAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.svn = self.vcs.svn() if revision is None: revision = "HEAD" self.path = path self.get_widget("from").set_text(str(1)) 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): from_rev_num = self.get_widget("from").get_text().lower() to_rev_num = self.get_widget("to").get_text().lower() if not from_rev_num.isdigit(): MessageBox(_("The from revision field must be an integer")) return from_rev = self.svn.revision("number", number=int(from_rev_num)) to_rev = self.svn.revision("head") if to_rev_num.isdigit(): to_rev = self.svn.revision("number", number=int(to_rev_num)) self.action = SVNAction( self.svn, notification=False ) self.action.append( self.svn.annotate, self.path, from_rev, 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: # remove fractional seconds and timezone information from # the end of the string provided by pysvn: # * timezone should be always "Z" (for UTC), "%Z" is not yet # yet supported by strptime # * fractional could be parsed with "%f" since python 2.6 # but this precision is not needed anyway # * the datetime module does not include strptime until python 2.4 # so this workaround is required for now datestr = item["date"][0:-8] date = datetime(*time.strptime(datestr,"%Y-%m-%dT%H:%M:%S")[:-2]) self.table.append([ item["number"], item["revision"].number, item["author"], rabbitvcs.util.helper.format_datetime(date), item["line"] ]) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: datestr = item["date"][0:-8] date = datetime(*time.strptime(datestr,"%Y-%m-%dT%H:%M:%S")[:-2]) text += "%s\t%s\t%s\t%s\t%s\n" % ( item["number"], item["revision"].number, item["author"], rabbitvcs.util.helper.format_datetime(date), item["line"] ) return text
class SVNAnnotate(Annotate): def __init__(self, path, revision=None): Annotate.__init__(self, path, revision) self.svn = self.vcs.svn() if revision is None: revision = "HEAD" self.path = path self.get_widget("from").set_text(str(1)) 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.loading_dialog = None self.load() # # Helper methods # def load(self): from_rev_num = self.get_widget("from").get_text().lower() to_rev_num = self.get_widget("to").get_text().lower() if not from_rev_num.isdigit(): MessageBox(_("The from revision field must be an integer")) return from_rev = self.svn.revision("number", number=int(from_rev_num)) to_rev = self.svn.revision("head") if to_rev_num.isdigit(): to_rev = self.svn.revision("number", number=int(to_rev_num)) self.launch_loading() self.action = SVNAction(self.svn, notification=False) self.action.append(self.svn.annotate, self.path, from_rev, to_rev) self.action.append(self.populate_table) self.action.append(self.enable_saveas) self.action.schedule() self.kill_loading() @gtk_unsafe def populate_table(self): blamedict = self.action.get_result(0) self.table.clear() for item in blamedict: # remove fractional seconds and timezone information from # the end of the string provided by pysvn: # * timezone should be always "Z" (for UTC), "%Z" is not yet # yet supported by strptime # * fractional could be parsed with "%f" since python 2.6 # but this precision is not needed anyway # * the datetime module does not include strptime until python 2.4 # so this workaround is required for now datestr = item["date"][0:-8] date = datetime(*time.strptime(datestr, "%Y-%m-%dT%H:%M:%S")[:-2]) self.table.append([ str(int(item["number"]) + 1), str(item["revision"].number), item["author"], rabbitvcs.util.helper.format_datetime(date), item["line"] ]) def generate_string_from_result(self): blamedict = self.action.get_result(0) text = "" for item in blamedict: datestr = item["date"][0:-8] date = datetime(*time.strptime(datestr, "%Y-%m-%dT%H:%M:%S")[:-2]) text += "%s\t%s\t%s\t%s\t%s\n" % ( str(int(item["number"]) + 1), str( item["revision"].number), item["author"], rabbitvcs.util.helper.format_datetime(date), item["line"]) return text