comparison mercurial/hg.py @ 29:4d3a5dcb6972

Make diffdir take a revision argument
author mpm@selenic.com
date Thu, 05 May 2005 15:05:50 -0800
parents daa724b27300
children 12f598340423
comparison
equal deleted inserted replaced
28:9f64ee817199 29:4d3a5dcb6972
406 edittext = self.ui.edit(edittext) 406 edittext = self.ui.edit(edittext)
407 n = self.changelog.add(node, new, edittext, tr, co, cn) 407 n = self.changelog.add(node, new, edittext, tr, co, cn)
408 408
409 tr.close() 409 tr.close()
410 410
411 def commit(self, update = None, text = ""): 411 def commit(self, update = None, parent, text = ""):
412 tr = self.transaction() 412 tr = self.transaction()
413 413
414 try: 414 try:
415 remove = [ l[:-1] for l in self.opener("to-remove") ] 415 remove = [ l[:-1] for l in self.opener("to-remove") ]
416 os.unlink(self.join("to-remove")) 416 os.unlink(self.join("to-remove"))
417 417
418 except IOError: 418 except IOError:
419 remove = [] 419 remove = []
420 420
421 if update == None: 421 if update == None:
422 update = self.diffdir(self.root)[0] 422 update = self.diffdir(self.root, parent)[0]
423 423
424 # check in files 424 # check in files
425 new = {} 425 new = {}
426 linkrev = self.changelog.count() 426 linkrev = self.changelog.count()
427 for f in update: 427 for f in update:
482 482
483 self.setcurrent(node) 483 self.setcurrent(node)
484 self.dircache.clear() 484 self.dircache.clear()
485 self.dircache.update(l) 485 self.dircache.update(l)
486 486
487 def diffdir(self, path): 487 def diffdir(self, path, changeset):
488 dc = self.dircache.copy()
489 changed = [] 488 changed = []
490 mf = {} 489 mf = {}
491 added = [] 490 added = []
492 491
493 if self.current: 492 if changeset:
494 change = self.changelog.read(self.current) 493 change = self.changelog.read(changeset)
495 mf = self.manifest.read(change[0]) 494 mf = self.manifest.read(change[0])
495
496 if changeset == self.current:
497 dc = self.dircache.copy()
498 else:
499 dc = dict.fromkeys(mf)
500
501 def fcmp(fn):
502 t1 = file(fn).read()
503 t2 = self.file(fn).revision(mf[fn])
504 return cmp(t1, t2)
496 505
497 for dir, subdirs, files in os.walk(self.root): 506 for dir, subdirs, files in os.walk(self.root):
498 d = dir[len(self.root)+1:] 507 d = dir[len(self.root)+1:]
499 if ".hg" in subdirs: subdirs.remove(".hg") 508 if ".hg" in subdirs: subdirs.remove(".hg")
500 509
503 try: s = os.stat(fn) 512 try: s = os.stat(fn)
504 except: continue 513 except: continue
505 if fn in dc: 514 if fn in dc:
506 c = dc[fn] 515 c = dc[fn]
507 del dc[fn] 516 del dc[fn]
517 if not c:
518 if fcmp(fn):
519 changed.append(fn)
508 if c[1] != s.st_size: 520 if c[1] != s.st_size:
509 changed.append(fn) 521 changed.append(fn)
510 elif c[0] != s.st_mode or c[2] != s.st_mtime: 522 elif c[0] != s.st_mode or c[2] != s.st_mtime:
511 t1 = file(fn).read() 523 if fcmp(fn):
512 t2 = self.file(fn).revision(mf[fn])
513 if t1 != t2:
514 changed.append(fn) 524 changed.append(fn)
515 else: 525 else:
516 if self.ignore(fn): continue 526 if self.ignore(fn): continue
517 added.append(fn) 527 added.append(fn)
518 528