Beispiel #1
0
    def refresh(self):
        repo = self.repo
        oldtags, oldparents = self.tagrevs, self.wcparents
        oldbookmarks = self.bookmarkrevs
        try:
            oldbranches = [repo[n].rev() for n in self.branchtags.values()]
        except error.RepoLookupError:
            oldbranches = []

        hglib.invalidaterepo(repo)

        self.longsummary = repo.ui.configbool('tortoisehg', 'longsummary', False)
        self.set_author_color()
        self.hidetags = hglib.gethidetags(repo.ui)

        try:
            self.wcparents = [x.rev() for x in repo.parents()]
            self.tagrevs = [repo[r].rev() for t, r in repo.tagslist()]
            self.branchtags = repo.branchtags()
            self.curbookmark = repo._bookmarkcurrent
            self.bookmarkrevs = [repo[n].rev() for n in repo._bookmarks.values()]
        except util.Abort:
            pass
        brevs = [repo[n].rev() for n in self.branchtags.values()]
        allrevs = set(oldtags + oldparents + oldbranches + oldbookmarks +
                      brevs + self.wcparents + self.tagrevs + self.bookmarkrevs)
        for rev in allrevs:
            if rev in self.revisions:
                del self.revisions[rev]

        self.mqpatches = []
        if hasattr(self.repo, 'mq'):
            self.repo.mq.parse_series()
            self.mqpatches = [p.name for p in self.repo.mq.applied]
Beispiel #2
0
    def search_thread(self, q, tgts, copy):
        hglib.invalidaterepo(self.repo)
        srcs = []
        audit_path = util.path_auditor(self.repo.root)
        m = cmdutil.match(self.repo)
        for abs in self.repo.walk(m):
            target = self.repo.wjoin(abs)
            good = True
            try:
                audit_path(abs)
            except:
                good = False
            status = self.repo.dirstate[abs]
            if (not good or not os.path.lexists(target)
                or (os.path.isdir(target) and not os.path.islink(target))):
                srcs.append(abs)
            elif copy and status == 'n':
                # looking for copies, so any revisioned file is a
                # potential source (yes, this will be expensive)
                # Added and removed files are not considered as copy
                # sources.
                srcs.append(abs)
        if copy:
            simularity = 1.0
        else:
            simularity = self.adjustment.get_value() / 100.0;

        gen = similar.findrenames(self.repo, tgts, srcs, simularity)
        for old, new, score in gen:
            q.put( [old, new, '%d%%' % (score*100)] )
Beispiel #3
0
    def command_done(self, returncode, useraborted, type):
        hglib.invalidaterepo(self.repo)
        merged = undo = True
        if type == 'merge':
            if returncode == 0:
                self.cmd.set_result(_('Merged successfully'), style='ok')
            elif useraborted:
                self.cmd.set_result(_('Canceled merging'), style='error')
            else:
                self.cmd.set_result(_('Failed to merge'), style='error')
            if len(self.repo.parents()) == 1:
                return
            merged = False
            focus = 'commit'
        elif type == 'undo':
            if returncode == 0:
                self.cmd.set_result(_('Undo successfully'), style='ok')
            elif useraborted:
                self.cmd.set_result(_('Canceled undo'), style='error')
            else:
                self.cmd.set_result(_('Failed to undo'), style='error')
            undo = False
            focus = 'merge'
        else:
            raise _('unexpected type: %s') % type

        self.discard.set_sensitive(merged)
        self.mergetool.set_sensitive(merged)
        self.mergelabel.set_sensitive(merged)
        self.buttons['merge'].set_sensitive(merged)
        self.buttons['undo'].set_sensitive(undo)
        self.buttons['commit'].set_sensitive(undo)
        self.buttons[focus].grab_focus()
Beispiel #4
0
 def refresh(self):
     hglib.invalidaterepo(self.repo)
     matcher = match.always(self.repo.root, self.repo.root)
     try:
         unknown = self.repo.status(match=matcher, unknown=True)[4]
     except (EnvironmentError, util.Abort), inst:
         gdialog.Prompt(_('Error while reading status'),
                        hglib.toutf(str(inst)), self).run()
         return
Beispiel #5
0
 def cmd_done(self, returncode, useraborted, noemit=False):
     if returncode == 0:
         if self.cmd.get_pbar():
             self.cmd.set_result(_('Succeed'), style='ok')
     elif useraborted:
         self.cmd.set_result(_('Canceled'), style='error')
     else:
         self.cmd.set_result(_('Failed'), style='error')
     hglib.invalidaterepo(self.repo)
     self.refresh()
     if not noemit:
         self.emit('repo-invalidated')
Beispiel #6
0
 def unknown_thread(self, q):
     hglib.invalidaterepo(self.repo)
     matcher = match.always(self.repo.root, self.repo.root)
     status = self.repo.status(node1=self.repo.dirstate.parents()[0],
                               node2=None, match=matcher, ignored=False,
                               clean=False, unknown=True)
     (modified, added, removed, deleted, unknown, ignored, clean) = status
     for u in unknown:
         q.put( u )
     for a in added:
         if not self.repo.dirstate.copied(a):
             q.put( a )
Beispiel #7
0
    def show_diff(self, selection):
        'User selected a row in the candidate tree'
        hglib.invalidaterepo(self.repo)
        model, cpaths = selection.get_selected_rows()
        sensitive = cpaths and True or False
        self.acceptbtn.set_sensitive(sensitive)

        self.buf.set_text('')
        bufiter = self.buf.get_start_iter()
        for path in cpaths:
            row = model[path]
            src, usrc, dest, udest, percent, sensitive = row
            if not sensitive:
                continue
            ctx = self.repo['.']
            aa = self.repo.wread(dest)
            rr = ctx.filectx(src).data()
            opts = mdiff.defaultopts
            difftext = mdiff.unidiff(rr, '', aa, '', src, dest, None, opts=opts)
            if not difftext:
                l = _('== %s and %s have identical contents ==\n\n') % (src, dest)
                self.buf.insert(bufiter, l)
                continue
            difflines = difftext.splitlines(True)
            for line in difflines:
                line = hglib.toutf(line)
                if line.startswith('---') or line.startswith('+++'):
                    self.buf.insert_with_tags_by_name(bufiter, line, 'header')
                elif line.startswith('-'):
                    line = hglib.diffexpand(line)
                    self.buf.insert_with_tags_by_name(bufiter, line, 'removed')
                elif line.startswith('+'):
                    line = hglib.diffexpand(line)
                    self.buf.insert_with_tags_by_name(bufiter, line, 'added')
                elif line.startswith('@@'):
                    self.buf.insert_with_tags_by_name(bufiter, line, 'position')
                else:
                    line = hglib.diffexpand(line)
                    self.buf.insert(bufiter, line)
Beispiel #8
0
 def accept_match(self):
     'User pressed "accept match" button'
     hglib.invalidaterepo(self.repo)
     wctx = self.repo[None]
     canmodel, upaths = self.cantree.get_selection().get_selected_rows()
     for path in upaths:
         row = canmodel[path]
         src, usrc, dest, udest, percent, sensitive = row
         if not sensitive:
             continue
         if not os.path.exists(self.repo.wjoin(src)):
             # Mark missing rename source as removed
             wctx.remove([src])
         wctx.copy(src, dest)
         shlib.shell_notify([self.repo.wjoin(src), self.repo.wjoin(dest)])
         if self.notify_func:
             self.notify_func()
         # Mark all rows with this target file as non-sensitive
         for row in canmodel:
             if row[2] == dest:
                 row[5] = False
     self.refresh()
Beispiel #9
0
                    self.update_check_count()
                    self.stbar.end()
                    self.stbar.set_text(self.status_error)
                    return False
                self.repo = self.newrepo
                self.ui = self.repo.ui
                self.refresh_file_tree()
                self.update_check_count()
                self.refresh_complete()
                self.ready = True
                self.stbar.end()
                return False

        self.set_preview_tab_name()
        repo = self.repo
        hglib.invalidaterepo(repo)
        if hasattr(repo, 'mq'):
            self.mqmode = repo.mq.applied and repo['.'] == repo['qtip']
            self.set_title(self.get_title())

        self.ready = False
        self.stbar.begin()
        thread = threading.Thread(target=get_repo_status)
        thread.setDaemon(True)
        thread.start()
        gobject.timeout_add(50, status_wait, thread)
        return True

    def nodes(self):
        return (self._node1, self._node2)