mercurial/hg.py
changeset 992 f859e9cba1b9
parent 991 b634b15c020b
child 993 6f274afc05c7
equal deleted inserted replaced
991:b634b15c020b 992:f859e9cba1b9
   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: