On 2009-03-20 16:15:45 +0000, Catalin Marinas wrote: > This patch adds support for checking which patches were already > merged upstream. This checking is done by trying to reverse-apply > the patches in the index before pushing them onto the stack. The > trivial merge cases in Index.merge() are ignored when performing > this operation otherwise the results could be wrong (e.g. a patch > adding a hunk and a subsequent patch canceling the previous change > would both be considered merged). > > Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxxxx> > --- > > This is in preparation for the updating of the push command where we > have this functionality (I think we had it for goto as well but was > lost with the update to stgit.lib). Test cases with --merged are > already done for the push command, so I haven't added any for goto > (but I'll push this patch only after push is updated). Looks good, except for a few things: > @@ -732,7 +732,7 @@ class Index(RunWithEnv): > # to use --binary. > self.apply(self.__repository.diff_tree(tree1, tree2, ['--full-index']), > quiet) > - def merge(self, base, ours, theirs, current = None): > + def merge(self, base, ours, theirs, current = None, check_trivial = True): > """Use the index (and only the index) to do a 3-way merge of the > L{Tree}s C{base}, C{ours} and C{theirs}. The merge will either > succeed (in which case the first half of the return value is Please update the documentation with your new option. :-) > @@ -752,12 +752,13 @@ class Index(RunWithEnv): > assert current == None or isinstance(current, Tree) > > # Take care of the really trivial cases. > - if base == ours: > - return (theirs, current) > - if base == theirs: > - return (ours, current) > - if ours == theirs: > - return (ours, current) > + if check_trivial: > + if base == ours: > + return (theirs, current) > + if base == theirs: > + return (ours, current) > + if ours == theirs: > + return (ours, current) Uh, what? What's the point of not doing this unconditionally? > @@ -379,3 +385,25 @@ class StackTransaction(object): > assert set(self.unapplied + self.hidden) == set(unapplied + hidden) > self.unapplied = unapplied > self.hidden = hidden > + > + def check_merged(self, patches): > + """Return a subset of patches already merged.""" > + merged = [] > + temp_index = self.__stack.repository.temp_index() > + temp_index_tree = None There's no need to create a new temp index here. The transaction object already has one. -- Karl Hasselström, kha@xxxxxxxxxxx www.treskal.com/kalle -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html