@@ -110,6 +110,18 @@ def emphasize(line):
110110 emphasize_prog = regex .compile (pat )
111111 return regsub .gsub (emphasize_prog , '<I>\\ 1</I>' , line )
112112
113+ revparse_prog = None
114+
115+ def revparse (rev ):
116+ global revparse_prog
117+ if not revparse_prog :
118+ revparse_prog = regex .compile (
119+ '^\([1-9][0-9]?[0-9]?\)\.\([1-9][0-9]?[0-9]?[0-9]?\)$' )
120+ if revparse_prog .match (rev ) < 0 :
121+ return None
122+ [major , minor ] = map (string .atoi , revparse_prog .group (1 , 2 ))
123+ return major , minor
124+
113125def load_cookies ():
114126 if not os .environ .has_key ('HTTP_COOKIE' ):
115127 return {}
@@ -440,12 +452,14 @@ def do_all(self):
440452 self .prologue (T_ALL )
441453 files = self .dir .list ()
442454 self .last_changed (files )
455+ self .format_index (files , localrefs = 1 )
443456 self .format_all (files )
444457
445458 def do_compat (self ):
446459 files = self .dir .list ()
447460 emit (COMPAT )
448461 self .last_changed (files )
462+ self .format_index (files , localrefs = 1 )
449463 self .format_all (files , edit = 0 )
450464 sys .exit (0 )
451465
@@ -483,7 +497,7 @@ def do_index(self):
483497 self .prologue (T_INDEX )
484498 self .format_index (self .dir .list (), add = 1 )
485499
486- def format_index (self , files , add = 0 ):
500+ def format_index (self , files , add = 0 , localrefs = 0 ):
487501 sec = 0
488502 for file in files :
489503 try :
@@ -501,7 +515,10 @@ def format_index(self, files, add=0):
501515 except KeyError :
502516 title = "Untitled"
503517 emit (INDEX_SECTION , sec = sec , title = title )
504- emit (INDEX_ENTRY , entry )
518+ if localrefs :
519+ emit (LOCAL_ENTRY , entry )
520+ else :
521+ emit (INDEX_ENTRY , entry )
505522 if sec :
506523 if add :
507524 emit (INDEX_ADDSECTION , sec = sec )
@@ -587,13 +604,23 @@ def rlog(self, command, entry=None):
587604 if line [:1 ] == '=' and len (line ) >= 40 and \
588605 line == line [0 ]* len (line ):
589606 del lines [- 1 ]
607+ headrev = None
590608 for line in lines :
591609 if entry and athead and line [:9 ] == 'revision ' :
592610 rev = string .strip (line [9 :])
593- if rev != '1.1' :
594- emit (DIFFLINK , entry , rev = rev , line = line )
595- else :
611+ mami = revparse (rev )
612+ if not mami :
596613 print line
614+ else :
615+ emit (REVISIONLINK , entry , rev = rev , line = line )
616+ if mami [1 ] > 1 :
617+ prev = "%d.%d" % (mami [0 ], mami [1 ]- 1 )
618+ emit (DIFFLINK , entry , prev = prev , rev = rev )
619+ if headrev :
620+ emit (DIFFLINK , entry , prev = rev , rev = headrev )
621+ else :
622+ headrev = rev
623+ print
597624 athead = 0
598625 else :
599626 athead = 0
@@ -605,18 +632,27 @@ def rlog(self, command, entry=None):
605632 print line
606633 print '</PRE>'
607634
635+ def do_revision (self ):
636+ entry = self .dir .open (self .ui .file )
637+ rev = self .ui .rev
638+ mami = revparse (rev )
639+ if not mami :
640+ self .error ("Invalid revision number: %s." % `rev` )
641+ self .prologue (T_REVISION , entry )
642+ self .shell (interpolate (SH_REVISION , entry , rev = rev ))
643+
608644 def do_diff (self ):
609645 entry = self .dir .open (self .ui .file )
646+ prev = self .ui .prev
610647 rev = self .ui .rev
611- r = regex .compile (
612- '^\([1-9][0-9]?[0-9]?\)\.\([1-9][0-9]?[0-9]?[0-9]?\)$' )
613- if r .match (rev ) < 0 :
648+ mami = revparse (rev )
649+ if not mami :
614650 self .error ("Invalid revision number: %s." % `rev` )
615- [ major , minor ] = map ( string . atoi , r . group ( 1 , 2 ))
616- if minor == 1 :
617- self .error ("No previous revision." )
618- return
619- prev = '%d.%d' % (major , minor - 1 )
651+ if prev :
652+ if not revparse ( prev ) :
653+ self .error ("Invalid previous revision number: %s." % `prev` )
654+ else :
655+ prev = '%d.%d' % (mami [ 0 ], mami [ 1 ] )
620656 self .prologue (T_DIFF , entry )
621657 self .shell (interpolate (SH_RDIFF , entry , rev = rev , prev = prev ))
622658
0 commit comments