Mercurial > public > mercurial-scm > hg
comparison mercurial/hg.py @ 96:fce47326677c
Add updated merge3 code
author | mpm@selenic.com |
---|---|
date | Wed, 18 May 2005 16:45:44 -0800 |
parents | 589f507bb259 |
children | 3dde7c87e36d |
comparison
equal
deleted
inserted
replaced
95:589f507bb259 | 96:fce47326677c |
---|---|
726 edittext = self.ui.edit(edittext) | 726 edittext = self.ui.edit(edittext) |
727 n = self.changelog.add(node, new, edittext, tr, co, cn) | 727 n = self.changelog.add(node, new, edittext, tr, co, cn) |
728 | 728 |
729 tr.close() | 729 tr.close() |
730 | 730 |
731 def merge3(self, fl, fn, my, other, transaction, link): | |
732 """perform a 3-way merge and append the result""" | |
733 | |
734 def temp(prefix, node): | |
735 pre = "%s~%s." % (os.path.basename(fn), prefix) | |
736 (fd, name) = tempfile.mkstemp("", pre) | |
737 f = os.fdopen(fd, "w") | |
738 f.write(fl.revision(node)) | |
739 f.close() | |
740 return name | |
741 | |
742 base = fl.ancestor(my, other) | |
743 self.ui.note("resolving %s\n" % fn) | |
744 self.ui.debug("local %s remote %s ancestor %s\n" % | |
745 (short(my), short(other), short(base))) | |
746 | |
747 if my == base: | |
748 text = fl.revision(other) | |
749 else: | |
750 a = temp("local", my) | |
751 b = temp("remote", other) | |
752 c = temp("parent", base) | |
753 | |
754 cmd = os.environ["HGMERGE"] | |
755 self.ui.debug("invoking merge with %s\n" % cmd) | |
756 r = os.system("%s %s %s %s" % (cmd, a, b, c)) | |
757 if r: | |
758 raise "Merge failed!" | |
759 | |
760 text = open(a).read() | |
761 os.unlink(a) | |
762 os.unlink(b) | |
763 os.unlink(c) | |
764 | |
765 return fl.addrevision(text, transaction, link, my, other) | |
766 | |
731 class remoterepository: | 767 class remoterepository: |
732 def __init__(self, ui, path): | 768 def __init__(self, ui, path): |
733 self.url = path.replace("hg://", "http://", 1) | 769 self.url = path.replace("hg://", "http://", 1) |
734 self.ui = ui | 770 self.ui = ui |
735 | 771 |