X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=commitid.scad.pl;h=83e3afe642e719c3105f119dea7805d2a2cfb8e3;hp=c09ce6ab4f635c64a7a0f33b074aee0c525330c0;hb=17f35150e597aee7c4d000bea9973000e8f17b32;hpb=1245bcd6f7ffd75751343b5c8c9d2f3908fa8f0c diff --git a/commitid.scad.pl b/commitid.scad.pl index c09ce6a..83e3afe 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -52,6 +52,12 @@ $SIG{__WARN__} = sub { die @_; }; # # We can generate these forms: # +# In each case: +# if tree is dirty, * is suffixed or prefixed to count or commitid +# if tree has untracked files, + is added +# (where it is added depends on the Form; in any case it does not +# change the size, but steals space from digits) +# # Small3: # Small4: # Small5: @@ -63,28 +69,27 @@ $SIG{__WARN__} = sub { die @_; }; # git rev-list --first-parent --count HEAD # typically 3-4 characters but we allow for up to 6 # padded with zeroes; if too long we reduce mod 10^n -# eg -# Small4 1070 -# If tree is dirty, + or * is suffixed, reducing number of -# digits by 1. +# eg if the count is 123456 +# Small5 3456* +# Small8 __123456 (where _ are spaces) # # Small4S: -# Small6S: -# Small8S: +# Small6S: Small6T: +# Small8S: Small9T: # Small10S: -# same but split into two lines eg -# Small4S 10 -# 70 +# same but split into two lines (S) or three lines (T) eg +# Small4S 45 Small6T _3 +# 6* 45 +# 6* # # Git4 Git4S -# Git6 Git6S +# Git6 Git6S Git6T # Git8 Git8S +# Git9 Git9T # Git10 Git10S # git-rev-parse HEAD (prefix of requested length) -# eg -# Git6 82f2a2 -# If tree is dirty, + or * is suffixed to commitid, -# reducing number of hex digits by 1. +# eg if the commitid is abcdef0123... +# Git5 abcd* # Full3 # Full4 @@ -97,10 +102,18 @@ $SIG{__WARN__} = sub { die @_; }; # git-rev-list --first-parent --count HEAD # git-rev-parse HEAD # eg -# Full6 1070 -# 82f2a2 -# If tree is dirty, + or * is suffixed to count (but not to -# commitid) reducing number of digits by 1. +# Full6 abcdef Full8 abcdef01 +# 23456* _123456* +# +# Full6T +# Full9T +# Full12T +# Full15T +# as Full but commit is split over two lines +# for a 3-line message; eg +# Full9T abc +# de* +# 456 # # FontDemo # @@ -255,30 +268,41 @@ our $do_git; # contains may chars 'c' (count) and/or 'o' (object) our $do_git_untracked = 1; our $argcounter; -sub rjustt ($$) { # right justify and truncate (ie, pad and truncate at left) - my ($sz, $whole) = @_; +sub rjustt ($$;$) { # right justify and truncate (ie, pad and truncate at left) + # always includes prefix + my ($sz, $whole, $prefix) = @_; + $prefix //= ''; my $lw = length $whole; - return $lw > $sz - ? substr($whole, $lw-$sz) - : sprintf "%${sz}s", $whole; + my $spare = $sz - $lw - (length $prefix); + return + ($spare > 0 ? (' ' x $spare) : ''). + $prefix. + substr($whole, ($spare < 0 ? -$spare : 0)); } -sub ljustt ($$$) { # always includes $suffix +sub ljustt ($$;$) { my ($sz, $whole, $suffix) = @_; + $suffix //= ''; $sz -= length $suffix; return sprintf "%-${sz}.${sz}s%s", $whole, $suffix; } +sub gentextmodule_q ($$$) { + my ($form, $s, $lines) = @_; + $gtm_demo_j++; + my $l = length $s; + return if $l % $lines; + my $e = $l/$lines; + return if $e < 2; + $gtm_demo_j--; + gentextmodule($form, $s =~ m/.{$e}/g); +} + sub gentextmodule_plusq ($$) { my ($form, $s) = @_; - my $l = length $s; gentextmodule($form, $s); - if (!($l & 1) && $l>=4) { - my $e = $l/2; - gentextmodule("${form}S", $s =~ m/.{$e}/g); - } else { - $gtm_demo_j++; - } + gentextmodule_q("${form}S", $s, 2); + gentextmodule_q("${form}T", $s, 3); } our @gcmd; @@ -343,10 +367,19 @@ sub do_git () { gentextmodule_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty)) if defined $git_object; - gentextmodule("Full$sz", - rjustt($sz, $git_count.$git_dirty), - ljustt($sz, $git_object, '')) - if defined $git_count && defined $git_object; + if (defined $git_count && defined $git_object) { + gentextmodule("Full$sz", + ljustt($sz, $git_object, ''), + rjustt($sz, $git_count.$git_dirty)); + + if (!($sz % 2)) { + my $e = $sz/2; + gentextmodule("Full".($e*3)."T", + ljustt($e*2, $git_object, $git_dirty) + =~ m/.{$e}/g, + rjustt($e, $git_count)); + } + } } }