comparison mercurial/localrepo.py @ 4531:b51a8138292a

Avoid extra filelogs entries. Right now, there are some situations in which localrepo.filecommit can create filelog entries even though they're not needed. For example: - permissions for a file have changed; - qrefresh can create a filelog entry identical to its parent (see the added test); - convert-repo creates extra filelog entries in every merge where the first parent has added files (for example, changeset ebebe9577a1a of the kernel repo added extra filelog entries to files in the arch/blackfin directory, even though the merge should only touch the drivers/ata directory). This makes "hg log file" in a converted repo less useful than it could be, since it may mention many merges that don't actually touch that specific file. They all come from the same basic problem: localrepo.commit (through filecommit) creates new filelog entries for all files passed to it (except for some cases during a merge). Patch and test case provided by Benoit. This should fix issue351.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Sat, 09 Jun 2007 01:04:28 -0300
parents 0ac7fee4f024
children 720ae5085ee3
comparison
equal deleted inserted replaced
4530:0ac7fee4f024 4531:b51a8138292a
691 if fpa == fp1: 691 if fpa == fp1:
692 fp1, fp2 = fp2, nullid 692 fp1, fp2 = fp2, nullid
693 elif fpa == fp2: 693 elif fpa == fp2:
694 fp2 = nullid 694 fp2 = nullid
695 695
696 # is the file unmodified from the parent? report existing entry 696 # is the file unmodified from the parent? report existing entry
697 if fp2 == nullid and not fl.cmp(fp1, t): 697 if fp2 == nullid and not fl.cmp(fp1, t):
698 return fp1 698 return fp1
699 699
700 changelist.append(fn) 700 changelist.append(fn)
701 return fl.add(t, meta, transaction, linkrev, fp1, fp2) 701 return fl.add(t, meta, transaction, linkrev, fp1, fp2)
702 702
703 def rawcommit(self, files, text, user, date, p1=None, p2=None, wlock=None, extra={}): 703 def rawcommit(self, files, text, user, date, p1=None, p2=None, wlock=None, extra={}):