comparison mercurial/commands.py @ 3578:3b4e00cba57a

Define and use nullrev (revision of nullid) instead of -1.
author Thomas Arendsen Hein <thomas@intevation.de>
date Sun, 29 Oct 2006 10:53:51 +0100
parents 00427c4b533b
children 8ee579885d23
comparison
equal deleted inserted replaced
3577:7f7425306925 3578:3b4e00cba57a
114 cl_count = repo.changelog.count() 114 cl_count = repo.changelog.count()
115 if node is None: 115 if node is None:
116 last = filelog.count() - 1 116 last = filelog.count() - 1
117 else: 117 else:
118 last = filelog.rev(node) 118 last = filelog.rev(node)
119 for i, window in increasing_windows(last, -1): 119 for i, window in increasing_windows(last, nullrev):
120 revs = [] 120 revs = []
121 for j in xrange(i - window, i + 1): 121 for j in xrange(i - window, i + 1):
122 n = filelog.node(j) 122 n = filelog.node(j)
123 revs.append((filelog.linkrev(n), 123 revs.append((filelog.linkrev(n),
124 follow and filelog.renamed(n))) 124 follow and filelog.renamed(n)))
155 raise util.Abort(_('can only follow copies/renames for explicit ' 155 raise util.Abort(_('can only follow copies/renames for explicit '
156 'file names')) 156 'file names'))
157 157
158 # The slow path checks files modified in every changeset. 158 # The slow path checks files modified in every changeset.
159 def changerevgen(): 159 def changerevgen():
160 for i, window in increasing_windows(repo.changelog.count()-1, -1): 160 for i, window in increasing_windows(repo.changelog.count()-1,
161 nullrev):
161 for j in xrange(i - window, i + 1): 162 for j in xrange(i - window, i + 1):
162 yield j, change(j)[3] 163 yield j, change(j)[3]
163 164
164 for rev, changefiles in changerevgen(): 165 for rev, changefiles in changerevgen():
165 matches = filter(matchfn, changefiles) 166 matches = filter(matchfn, changefiles)
167 fncache[rev] = matches 168 fncache[rev] = matches
168 wanted[rev] = 1 169 wanted[rev] = 1
169 170
170 class followfilter: 171 class followfilter:
171 def __init__(self, onlyfirst=False): 172 def __init__(self, onlyfirst=False):
172 self.startrev = -1 173 self.startrev = nullrev
173 self.roots = [] 174 self.roots = []
174 self.onlyfirst = onlyfirst 175 self.onlyfirst = onlyfirst
175 176
176 def match(self, rev): 177 def match(self, rev):
177 def realparents(rev): 178 def realparents(rev):
178 if self.onlyfirst: 179 if self.onlyfirst:
179 return repo.changelog.parentrevs(rev)[0:1] 180 return repo.changelog.parentrevs(rev)[0:1]
180 else: 181 else:
181 return filter(lambda x: x != -1, repo.changelog.parentrevs(rev)) 182 return filter(lambda x: x != nullrev,
182 183 repo.changelog.parentrevs(rev))
183 if self.startrev == -1: 184
185 if self.startrev == nullrev:
184 self.startrev = rev 186 self.startrev = rev
185 return True 187 return True
186 188
187 if rev > self.startrev: 189 if rev > self.startrev:
188 # forward: all descendants 190 # forward: all descendants
320 322
321 hexfunc = self.ui.debugflag and hex or short 323 hexfunc = self.ui.debugflag and hex or short
322 324
323 parents = log.parentrevs(rev) 325 parents = log.parentrevs(rev)
324 if not self.ui.debugflag: 326 if not self.ui.debugflag:
325 parents = [p for p in parents if p != -1] 327 parents = [p for p in parents if p != nullrev]
326 if len(parents) == 1 and parents[0] == rev-1: 328 if len(parents) == 1 and parents[0] == rev-1:
327 parents = [] 329 parents = []
328 parents = [(p, hexfunc(log.node(p))) for p in parents] 330 parents = [(p, hexfunc(log.node(p))) for p in parents]
329 331
330 332
1870 if lr >= endrev: 1872 if lr >= endrev:
1871 break 1873 break
1872 if rev in rcache[fn]: 1874 if rev in rcache[fn]:
1873 return rcache[fn][rev] 1875 return rcache[fn][rev]
1874 mr = repo.manifest.rev(man) 1876 mr = repo.manifest.rev(man)
1875 if repo.manifest.parentrevs(mr) != (mr - 1, -1): 1877 if repo.manifest.parentrevs(mr) != (mr - 1, nullrev):
1876 return ncache[fn].get(repo.manifest.find(man, fn)[0]) 1878 return ncache[fn].get(repo.manifest.find(man, fn)[0])
1877 if not dcache or dcache[0] != man: 1879 if not dcache or dcache[0] != man:
1878 dcache[:] = [man, repo.manifest.readdelta(man)] 1880 dcache[:] = [man, repo.manifest.readdelta(man)]
1879 if fn in dcache[1]: 1881 if fn in dcache[1]:
1880 return ncache[fn].get(dcache[1][fn]) 1882 return ncache[fn].get(dcache[1][fn])
1886 du = dui(ui) 1888 du = dui(ui)
1887 displayer.ui = du 1889 displayer.ui = du
1888 elif st == 'add': 1890 elif st == 'add':
1889 du.bump(rev) 1891 du.bump(rev)
1890 changenode = repo.changelog.node(rev) 1892 changenode = repo.changelog.node(rev)
1891 parents = [p for p in repo.changelog.parentrevs(rev) if p != -1] 1893 parents = [p for p in repo.changelog.parentrevs(rev)
1894 if p != nullrev]
1892 if opts['no_merges'] and len(parents) == 2: 1895 if opts['no_merges'] and len(parents) == 2:
1893 continue 1896 continue
1894 if opts['only_merges'] and len(parents) != 2: 1897 if opts['only_merges'] and len(parents) != 2:
1895 continue 1898 continue
1896 1899
1920 displayer.show(rev, changenode, brinfo=br, copies=copies) 1923 displayer.show(rev, changenode, brinfo=br, copies=copies)
1921 if opts['patch']: 1924 if opts['patch']:
1922 if parents: 1925 if parents:
1923 prev = parents[0] 1926 prev = parents[0]
1924 else: 1927 else:
1925 prev = -1 1928 prev = nullrev
1926 prev = repo.changelog.node(prev) 1929 prev = repo.changelog.node(prev)
1927 patch.diff(repo, prev, changenode, match=matchfn, fp=du) 1930 patch.diff(repo, prev, changenode, match=matchfn, fp=du)
1928 du.write("\n\n") 1931 du.write("\n\n")
1929 elif st == 'iter': 1932 elif st == 'iter':
1930 if count == limit: break 1933 if count == limit: break