822 c1 = self.changelog.read(p1) |
822 c1 = self.changelog.read(p1) |
823 c2 = self.changelog.read(p2) |
823 c2 = self.changelog.read(p2) |
824 m1 = self.manifest.read(c1[0]) |
824 m1 = self.manifest.read(c1[0]) |
825 mf1 = self.manifest.readflags(c1[0]) |
825 mf1 = self.manifest.readflags(c1[0]) |
826 m2 = self.manifest.read(c2[0]) |
826 m2 = self.manifest.read(c2[0]) |
|
827 changed = [] |
827 |
828 |
828 if orig_parent == p1: |
829 if orig_parent == p1: |
829 update_dirstate = 1 |
830 update_dirstate = 1 |
830 else: |
831 else: |
831 update_dirstate = 0 |
832 update_dirstate = 0 |
862 # no need to add a revision |
863 # no need to add a revision |
863 mm[f] = fp1 |
864 mm[f] = fp1 |
864 continue |
865 continue |
865 |
866 |
866 mm[f] = r.add(t, {}, tr, linkrev, fp1, fp2) |
867 mm[f] = r.add(t, {}, tr, linkrev, fp1, fp2) |
|
868 changed.append(f) |
867 if update_dirstate: |
869 if update_dirstate: |
868 self.dirstate.update([f], "n") |
870 self.dirstate.update([f], "n") |
869 except IOError: |
871 except IOError: |
870 try: |
872 try: |
871 del mm[f] |
873 del mm[f] |
876 # deleted from p2? |
878 # deleted from p2? |
877 pass |
879 pass |
878 |
880 |
879 mnode = self.manifest.add(mm, mfm, tr, linkrev, c1[0], c2[0]) |
881 mnode = self.manifest.add(mm, mfm, tr, linkrev, c1[0], c2[0]) |
880 user = user or self.ui.username() |
882 user = user or self.ui.username() |
881 n = self.changelog.add(mnode, files, text, tr, p1, p2, user, date) |
883 n = self.changelog.add(mnode, changed, text, tr, p1, p2, user, date) |
882 tr.close() |
884 tr.close() |
883 if update_dirstate: |
885 if update_dirstate: |
884 self.dirstate.setparents(n, nullid) |
886 self.dirstate.setparents(n, nullid) |
885 |
887 |
886 def commit(self, files = None, text = "", user = None, date = None, |
888 def commit(self, files = None, text = "", user = None, date = None, |
887 match = util.always, force=False): |
889 match = util.always, force=False): |
888 commit = [] |
890 commit = [] |
889 remove = [] |
891 remove = [] |
|
892 changed = [] |
|
893 |
890 if files: |
894 if files: |
891 for f in files: |
895 for f in files: |
892 s = self.dirstate.state(f) |
896 s = self.dirstate.state(f) |
893 if s in 'nmai': |
897 if s in 'nmai': |
894 commit.append(f) |
898 commit.append(f) |
960 # no need to add a revision |
964 # no need to add a revision |
961 new[f] = fp1 |
965 new[f] = fp1 |
962 continue |
966 continue |
963 |
967 |
964 new[f] = r.add(t, meta, tr, linkrev, fp1, fp2) |
968 new[f] = r.add(t, meta, tr, linkrev, fp1, fp2) |
|
969 # remember what we've added so that we can later calculate |
|
970 # the files to pull from a set of changesets |
|
971 changed.append(f) |
965 |
972 |
966 # update manifest |
973 # update manifest |
967 m1.update(new) |
974 m1.update(new) |
968 for f in remove: |
975 for f in remove: |
969 if f in m1: |
976 if f in m1: |
974 # add changeset |
981 # add changeset |
975 new = new.keys() |
982 new = new.keys() |
976 new.sort() |
983 new.sort() |
977 |
984 |
978 if not text: |
985 if not text: |
979 edittext = "\n" + "HG: manifest hash %s\n" % hex(mn) |
986 edittext = "" |
980 edittext += "".join(["HG: changed %s\n" % f for f in new]) |
987 if p2 != nullid: |
|
988 edittext += "HG: branch merge\n" |
|
989 edittext += "\n" + "HG: manifest hash %s\n" % hex(mn) |
|
990 edittext += "".join(["HG: changed %s\n" % f for f in changed]) |
981 edittext += "".join(["HG: removed %s\n" % f for f in remove]) |
991 edittext += "".join(["HG: removed %s\n" % f for f in remove]) |
|
992 if not changed and not remove: |
|
993 edittext += "HG: no files changed\n" |
982 edittext = self.ui.edit(edittext) |
994 edittext = self.ui.edit(edittext) |
983 if not edittext.rstrip(): |
995 if not edittext.rstrip(): |
984 return None |
996 return None |
985 text = edittext |
997 text = edittext |
986 |
998 |
987 user = user or self.ui.username() |
999 user = user or self.ui.username() |
988 n = self.changelog.add(mn, new, text, tr, p1, p2, user, date) |
1000 n = self.changelog.add(mn, changed, text, tr, p1, p2, user, date) |
989 tr.close() |
1001 tr.close() |
990 |
1002 |
991 self.dirstate.setparents(n) |
1003 self.dirstate.setparents(n) |
992 self.dirstate.update(new, "n") |
1004 self.dirstate.update(new, "n") |
993 self.dirstate.forget(remove) |
1005 self.dirstate.forget(remove) |
1008 match = util.always): |
1020 match = util.always): |
1009 mf2, u = None, [] |
1021 mf2, u = None, [] |
1010 |
1022 |
1011 def fcmp(fn, mf): |
1023 def fcmp(fn, mf): |
1012 t1 = self.wfile(fn).read() |
1024 t1 = self.wfile(fn).read() |
1013 t2 = self.file(fn).revision(mf[fn]) |
1025 t2 = self.file(fn).revision(mf.get(fn, nullid)) |
1014 return cmp(t1, t2) |
1026 return cmp(t1, t2) |
1015 |
1027 |
1016 def mfmatches(node): |
1028 def mfmatches(node): |
1017 mf = dict(self.manifest.read(node)) |
1029 mf = dict(self.manifest.read(node)) |
1018 for fn in mf.keys(): |
1030 for fn in mf.keys(): |
1770 except IOError: |
1782 except IOError: |
1771 os.makedirs(os.path.dirname(self.wjoin(f))) |
1783 os.makedirs(os.path.dirname(self.wjoin(f))) |
1772 self.wfile(f, "w").write(t) |
1784 self.wfile(f, "w").write(t) |
1773 util.set_exec(self.wjoin(f), mf2[f]) |
1785 util.set_exec(self.wjoin(f), mf2[f]) |
1774 if moddirstate: |
1786 if moddirstate: |
1775 self.dirstate.update([f], 'n') |
1787 if mode == 'm': |
|
1788 self.dirstate.update([f], 'n', st_mtime=0) |
|
1789 else: |
|
1790 self.dirstate.update([f], 'n') |
1776 |
1791 |
1777 # merge the tricky bits |
1792 # merge the tricky bits |
1778 files = merge.keys() |
1793 files = merge.keys() |
1779 files.sort() |
1794 files.sort() |
1780 for f in files: |
1795 for f in files: |