Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | more flexible pattern for localizing the sha1/3 hashes (allowing for adjusting the no. of displayed hash digits via `fossil set hash-digits'). empirically, `fossil' displays at least 6 digits irrespective of a possibly smaller hash-digits setting. hence the {6,} or {2,} repetitions in the assorted patterns. |
---|---|
Timelines: | family | ancestors | descendants | both | dresden |
Files: | files | file ages | folders |
SHA1: |
dee40a390af3ff9bf7a041397525c2a1 |
User & Date: | j 2019-11-13 13:17:18 |
Context
2019-11-14
| ||
22:28 | a hack to make grep work for non-standard hash-digits setting. Leaf check-in: 23d147961a user: j tags: dresden | |
2019-11-13
| ||
13:17 | more flexible pattern for localizing the sha1/3 hashes (allowing for adjusting the no. of displayed hash digits via `fossil set hash-digits'). empirically, `fossil' displays at least 6 digits irrespective of a possibly smaller hash-digits setting. hence the {6,} or {2,} repetitions in the assorted patterns. check-in: dee40a390a user: j tags: dresden | |
2019-10-16
| ||
13:26 | give up on hard-coding a list of valid commands (to decrease latency minimally) and use a dynamic list instead. check-in: a721f86fe9 user: j tags: dresden | |
Changes
Changes to fsl.
︙ | ︙ | |||
115 116 117 118 119 120 121 | alias f {finfo} alias fb {finfo -b} alias fi {finfo} alias flog {finfo} alias heads leaves; # for hg refugees alias log {timeline -t ci} alias not {extras --dotfiles --ignore {}} | | | 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | alias f {finfo} alias fb {finfo -b} alias fi {finfo} alias flog {finfo} alias heads leaves; # for hg refugees alias log {timeline -t ci} alias not {extras --dotfiles --ignore {}} alias s {changes --differ} ;# instead of redundant `show' interceptor... alias t {timeline -t ci} alias ticks {ticket show 1} alias time {timeline} # -- Filters: filter status { |
︙ | ︙ | |||
186 187 188 189 190 191 192 | filter colorizeOutput {finfo leaves status} { # this used to be `fancy_timeline'. but is now used much less # since most of the work is relocated to `reformTimeline' # the regex/regsubs below could be tidied up, accordingly... # # Expressions to match: set revnum_rx {(\]:)(\d+)} | | | 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | filter colorizeOutput {finfo leaves status} { # this used to be `fancy_timeline'. but is now used much less # since most of the work is relocated to `reformTimeline' # the regex/regsubs below could be tidied up, accordingly... # # Expressions to match: set revnum_rx {(\]:)(\d+)} set artifact_rx {\[([a-f\d]{4})([a-f\d]{2,}\]*)\]} set date_rx {(^|\n|([ ]*\(\d+\) ))((=== )?\d{4}-\d\d-\d\d( ===)?)} set time_rx {\d\d:\d\d:\d\d (UTC)?} set current_rx {\*CURRENT\*} set frkmrg_rx {\*(FORK|MERGE|BRANCH)\*} # Colour the output (repeated substitutions on $line): set line [regsub $date_rx $line \\2[coloured blue \\3\\6]] set line [regsub $time_rx $line [coloured yellow &]] |
︙ | ︙ | |||
406 407 408 409 410 411 412 | if {$::config::dbglvl > 98} then {set origlines $lines} # join all lines to enable matching patterns across line boundaries: set timeline [join $lines ""] set rgxdate {(\d{4}-\d\d-\d\d)} set rgxtime {(\d\d:\d\d:\d\d)} | | | | 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 | if {$::config::dbglvl > 98} then {set origlines $lines} # join all lines to enable matching patterns across line boundaries: set timeline [join $lines ""] set rgxdate {(\d{4}-\d\d-\d\d)} set rgxtime {(\d\d:\d\d:\d\d)} set rgxsha1 {(\[[a-f\d]{6,}\])} set rgxtimd {} set rgxdatehead {} set rgxrev {} append rgxtimd {(^|\n)} "\($rgxtime|$rgxdate\)" append rgxdatehead {(^|\n)(=== )} $rgxdate {( ===)(\n)} set rgxarti {(\[)([a-f\d]{4})([a-f\d]{2,}\])(:)([0-9-]+)} append rgxrev $rgxtimd { } $rgxsha1 set rgxuser {( \()(user:( |(\n\s+)))([^\s]+)} set rgxtags {( (tags|branch):)([^)]+)(\))} set rgxcurr {\*CURRENT\*} set rgxfmbr {\*(FORK|MERGE|BRANCH)\*} set p1 {(--- (line|entry) limit \([0-9]+\) reached ---)} |
︙ | ︙ | |||
500 501 502 503 504 505 506 | proc reformFinfo-b {lines revnums} { #-------------------------------------------------- # `finfo -b' needs some special treatment prior to # further filtering/colorizing #-------------------------------------------------- set out {} | | | 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 | proc reformFinfo-b {lines revnums} { #-------------------------------------------------- # `finfo -b' needs some special treatment prior to # further filtering/colorizing #-------------------------------------------------- set out {} set rgxrev {^([a-f\d]{6,})} set cinum [dict size $revnums] set ciwid [string length $cinum] foreach line $lines { set words [split $line] set rev [lindex $words 0] |
︙ | ︙ | |||
536 537 538 539 540 541 542 | proc computeRevnums {params} { #----------------------------------------------------------------------- # generate a dictionary of SHA1 keys vs. revision numbers #----------------------------------------------------------------------- set revcnt 0 set numrev 0 set rgxtime {^\d\d:\d\d:\d\d} | | | 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 | proc computeRevnums {params} { #----------------------------------------------------------------------- # generate a dictionary of SHA1 keys vs. revision numbers #----------------------------------------------------------------------- set revcnt 0 set numrev 0 set rgxtime {^\d\d:\d\d:\d\d} set rgxrev {\[([a-f\d]{6,})([^\]]*)\]} set rgxrepo {\-R\s+.+} set repo {} regexp $rgxrepo $params repo if { [catch {exec fossil timeline -t ci -n 0 -W 0 {*}$repo} timeline] } { puts $timeline exit 1 |
︙ | ︙ | |||
564 565 566 567 568 569 570 | return $revnums } proc fixGrep {lines params grepflags} { set fname [last $params] set finfo [lrange [split [exec fossil finfo -W 0 $fname] \n] 1 end] set rgxdate {^\d{4}-\d\d-\d\d} | | | 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 | return $revnums } proc fixGrep {lines params grepflags} { set fname [last $params] set finfo [lrange [split [exec fossil finfo -W 0 $fname] \n] 1 end] set rgxdate {^\d{4}-\d\d-\d\d} set rgxhash {\[([a-f\d]{6,})\]} foreach line $finfo { regexp "$rgxdate $rgxhash" $line _ cihash regexp ", artifact: $rgxhash, branch: .*\\)" $line _ fhash # an artifact 'fhash' can be part of multiple checkins. so we # have to collect all of them via `dict lappend' dict lappend cihashes $fhash \[$cihash\] } |
︙ | ︙ | |||
1018 1019 1020 1021 1022 1023 1024 | } regsub $args $args0 {} opts set version [lindex $args 0] if { $version != "" } then { set hash2num [computeRevnums {}] dict for {key val} $hash2num { | | | 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 | } regsub $args $args0 {} opts set version [lindex $args 0] if { $version != "" } then { set hash2num [computeRevnums {}] dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } if {[dict exists $num2hash $version]} { set version [dict get $num2hash $version] set args [lreplace $args 0 0 $version] } } |
︙ | ︙ | |||
1044 1045 1046 1047 1048 1049 1050 | # Note: tentative interpretation of UUID as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { | | | 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 | # Note: tentative interpretation of UUID as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } # we assume canonical use of `amend' as described in its manpage: # uuid can be expected to be the first argument. set uuid [lindex $params 1] if {[dict exists $num2hash $uuid]} { set version [dict get $num2hash $uuid] |
︙ | ︙ | |||
1071 1072 1073 1074 1075 1076 1077 | # Note: tentative interpretation of VERSION as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { | | | 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 | # Note: tentative interpretation of VERSION as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } set rflagpos [lsearch $params {-r}] set revnumpos [expr $rflagpos + 1] set version [lindex $params $revnumpos] |
︙ | ︙ | |||
1153 1154 1155 1156 1157 1158 1159 | # Note: tentative interpretation of VERSION as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { | | | 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 | # Note: tentative interpretation of VERSION as chronological revison number # takes precedence. If you actually mean the SHA1 hash you might need to # provide a longer initial segment to disambiguate it (e.g. 1234 might not # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } set version [last $params] if {[dict exists $num2hash $version]} { set version [dict get $num2hash $version] set params [lreplace $params end end $version] |
︙ | ︙ | |||
1183 1184 1185 1186 1187 1188 1189 | # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] # exchange keys and values in the above dictonary. at the same time, # strip the square brackets around the hash value: dict for {key val} $hash2num { | | | 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 | # suffice if there are already so many checkins). # ---------------------------------------------------------------------------- set hash2num [computeRevnums {}] # exchange keys and values in the above dictonary. at the same time, # strip the square brackets around the hash value: dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } set tversion {} set fversion {} set fidx 0 set tidx 0 |
︙ | ︙ | |||
1360 1361 1362 1363 1364 1365 1366 | if {![regexp $rgxopt $params revarg]} {return $params} set hash2num [computeRevnums {}] # exchange keys and values in the above dictonary. at the same time, # strip the square brackets around the hash value: dict for {key val} $hash2num { | | | 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 | if {![regexp $rgxopt $params revarg]} {return $params} set hash2num [computeRevnums {}] # exchange keys and values in the above dictonary. at the same time, # strip the square brackets around the hash value: dict for {key val} $hash2num { regexp {[a-f\d]{6,}} $key sha1 dict set num2hash $val $sha1 } # translate rev. numbers to sha1 hashes and construct the # required `diff' arguments: regexp $rgxrevnum $revarg numbers set revs [split $numbers :] |
︙ | ︙ |