comparison mercurial/hg.py @ 229:1b11da6ee69e

teach commit about dirstate.parents() -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 teach commit about dirstate.parents() manifest hash: 89374a15a1e680a251f1a084c18136cb27ad2b42 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoMOeywK+sNU5EO8RAj6rAJ9NBf0401gAlzA315m7gaEPeteaewCfe6A4 Bn3nm77acgIukB1ePfK1o1Y= =P2y2 -----END PGP SIGNATURE-----
author mpm@selenic.com
date Fri, 03 Jun 2005 12:54:54 -0800
parents 2502aa663484
children 00ea3613f82c
comparison
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