mercurial/hg.py
changeset 229 1b11da6ee69e
parent 228 2502aa663484
child 230 00ea3613f82c
equal deleted inserted replaced
228:2502aa663484 229:1b11da6ee69e
   411         tr.close()
   411         tr.close()
   412         self.dirstate.setparents(p1, p2)
   412         self.dirstate.setparents(p1, p2)
   413         self.dirstate.clear()
   413         self.dirstate.clear()
   414         self.dirstate.update(mmap.keys(), "n")
   414         self.dirstate.update(mmap.keys(), "n")
   415 
   415 
   416     def commit(self, parent, files = None, text = ""):
   416     def commit(self, files = None, text = ""):
   417         self.lock()
       
   418 
       
   419         commit = []
   417         commit = []
   420         remove = []
   418         remove = []
   421         if files:
   419         if files:
   422             for f in files:
   420             for f in files:
   423                 s = self.dirstate.state(f)
   421                 s = self.dirstate.state(f)
   434 
   432 
   435         if not commit and not remove:
   433         if not commit and not remove:
   436             self.ui.status("nothing changed\n")
   434             self.ui.status("nothing changed\n")
   437             return
   435             return
   438 
   436 
       
   437         p1, p2 = self.dirstate.parents()
       
   438         c1 = self.changelog.read(p1)
       
   439         c2 = self.changelog.read(p2)
       
   440         m1 = self.manifest.read(c1[0])
       
   441         m2 = self.manifest.read(c2[0])
   439         lock = self.lock()
   442         lock = self.lock()
   440         tr = self.transaction()
   443         tr = self.transaction()
   441 
   444 
   442         # check in files
   445         # check in files
   443         new = {}
   446         new = {}
   450             except IOError:
   453             except IOError:
   451                 self.warn("trouble committing %s!\n" % f)
   454                 self.warn("trouble committing %s!\n" % f)
   452                 raise
   455                 raise
   453 
   456 
   454             r = self.file(f)
   457             r = self.file(f)
   455             new[f] = r.add(t, tr, linkrev)
   458             fp1 = m1.get(f, nullid)
       
   459             fp2 = m2.get(f, nullid)
       
   460             new[f] = r.add(t, tr, linkrev, fp1, fp2)
   456 
   461 
   457         # update manifest
   462         # update manifest
   458         mmap = self.manifest.read(self.manifest.tip())
   463         m1.update(new)
   459         mmap.update(new)
   464         for f in remove: del m1[f]
   460         for f in remove:
   465         mn = self.manifest.add(m1, tr, linkrev, c1[0], c2[0])
   461             del mmap[f]
       
   462         mnode = self.manifest.add(mmap, tr, linkrev)
       
   463 
   466 
   464         # add changeset
   467         # add changeset
   465         new = new.keys()
   468         new = new.keys()
   466         new.sort()
   469         new.sort()
   467 
   470 
   468         edittext = text + "\n" + "HG: manifest hash %s\n" % hex(mnode)
   471         edittext = text + "\n" + "HG: manifest hash %s\n" % hex(mn)
   469         edittext += "".join(["HG: changed %s\n" % f for f in new])
   472         edittext += "".join(["HG: changed %s\n" % f for f in new])
   470         edittext += "".join(["HG: removed %s\n" % f for f in remove])
   473         edittext += "".join(["HG: removed %s\n" % f for f in remove])
   471         edittext = self.ui.edit(edittext)
   474         edittext = self.ui.edit(edittext)
   472 
   475 
   473         n = self.changelog.add(mnode, new, edittext, tr)
   476         n = self.changelog.add(mn, new, edittext, tr, p1, p2)
   474         tr.close()
   477         tr.close()
   475 
   478 
   476         self.setcurrent(n)
   479         self.dirstate.setparents(n)
   477         self.dirstate.update(new, "n")
   480         self.dirstate.update(new, "n")
   478         self.dirstate.forget(remove)
   481         self.dirstate.forget(remove)
   479 
   482 
   480     def checkout(self, node):
   483     def checkout(self, node):
   481         # checkout is really dumb at the moment
   484         # checkout is really dumb at the moment