Changeset 3241
- Timestamp:
- 02/15/08 03:37:04 (10 months ago)
- Files:
-
- gitplugin/0.11/tracext/git/PyGIT.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gitplugin/0.11/tracext/git/PyGIT.py
r3238 r3241 114 114 115 115 class Storage: 116 __SREV_MIN = 6 # minimum short-rev length 117 116 118 @staticmethod 117 119 def git_version(): … … 175 177 self.logger.debug("triggered rebuild of commit tree db for %d" % id(self)) 176 178 new_db = {} 179 new_sdb = {} 177 180 new_tags = set([]) 178 181 parent = None … … 186 189 187 190 rev = revs[0] 191 192 # shortrev "hash" map 193 new_sdb.setdefault(rev[:self.__SREV_MIN], set()).add(rev) 194 188 195 parents = set(revs[1:]) 189 196 … … 210 217 new_db[parent] = (set([rev]), set(), 0) # dummy ordinal_id 211 218 212 self._commit_db = new_db, parent, new_tags 219 self._commit_db = new_db, parent, new_tags, new_sdb 213 220 self.last_youngest_rev = youngest 214 221 self.logger.debug("rebuilt commit tree db for %d with %d entries" % (id(self),len(new_db))) … … 297 304 def shortrev(self, rev): 298 305 "try to shorten sha id" 299 return self.repo.rev_parse("--short", str(rev)).read().strip() 306 #try to emulate the following: 307 #return self.repo.rev_parse("--short", str(rev)).read().strip() 308 309 rev = str(rev) 310 311 db = self.get_commits() 312 sdb = self._commit_db[3] 313 314 if rev not in db: 315 return rev 316 317 srev = rev[:self.__SREV_MIN] 318 srevs = sdb[srev] 319 320 if len(srevs) == 1: 321 return srev # we already got a unique id 322 323 # find a shortened id for which rev doesn't conflict with 324 # the other ones from srevs 325 crevs = srevs - set([rev]) 326 327 for l in range(self.__SREV_MIN+1, 40): 328 srev = rev[:l] 329 if srev not in [ r[:l] for r in crevs ]: 330 return srev 331 332 return rev # worst-case, all except the last character match 300 333 301 334 def get_branches(self): … … 504 537 505 538 if __name__ == '__main__': 506 import sys, logging 507 508 print "git version [%s]" % str( git_version())539 import sys, logging, timeit 540 541 print "git version [%s]" % str(Storage.git_version()) 509 542 510 543 g = Storage(sys.argv[1], logging) … … 549 582 print len(check4loops(g.parents(g.head())[0])) 550 583 584 #p = g.head() 585 #revs = [ g.history_relative_rev(p, i) for i in range(0,10) ] 586 revs = g.get_commits().keys() 587 588 def shortrev_test(): 589 for i in revs: 590 i = str(i) 591 s = g.shortrev(i) 592 assert i.startswith(s) 593 594 iters = 1 595 print "timing %d*shortrev_test()..." % len(revs) 596 t = timeit.Timer("shortrev_test()", "from __main__ import shortrev_test") 597 print "%.2f usec/rev" % (1000000 * t.timeit(number=iters)/len(revs)) 598 551 599 #print len(check4loops(g.oldest_rev())) 552 600
