X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=commitid.scad.pl;h=4c7371fb5ba19d3b4b711d8ddf851452b6d656b5;hb=a75f4245977276aed475729d9c71faad2a0c528e;hp=983a4abc08abf4a5b8423705bb59058357f35d5b;hpb=d9669daa23ac69bdd05d2afc2b1ae69644f03a1a;p=reprap-play.git diff --git a/commitid.scad.pl b/commitid.scad.pl index 983a4ab..4c7371f 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -178,7 +178,7 @@ # starts abcdeffedbcaabcdef... In the examples `_' shows where a # space would be printed. # -# Small2 Small3 ... Small10 +# Small2 Small3 ... Small9 Small10 Small12 Small14 Small16 # A single line containing as much of the count will fit, eg: # Small5 3456* # Small8 _*123456 @@ -186,16 +186,16 @@ # will fit without makign the output ambiguous: # Small9 ab*123456 # -# Small2S Small4S ... Small10S -# Small3T Small9T +# Small2S Small4S ... Small16S +# Small3T Small9T Small12T # Same as Small but split into two lines (S) # or three lines (T). Eg: # Small4S *4 Small6T _* # 56 34 # 56 -# Git2 Git3 ... Git10 -# Git4S Git6S ... Git10S -# Git6T Git9T +# Git2 Git3 ... Git9 Git10 Git12 Git14 Git16 +# Git4S Git6S ... Git16S +# Git6T Git9T Git12T # Just the commit object hash, in one, two (S) or three (T) # lines. E.g.: # Git5 abcd* @@ -203,7 +203,7 @@ # Full4 Full6 ... Full20: # The commit object hash plus the commit count, on # separate lines, eg: -# Full6 abcdef Full8 abcdeffe +# Full12 abcdef Full16 abcdeffe # *23456 _*123456 # # Full6T Full9T ... Full30T @@ -428,26 +428,35 @@ our $do_git_untracked = 1; our $argcounter; our @forms; +our %included; # 0 = not at all; 1 = truncated; 2 = full -sub rjustt ($$;$) { # right justify and truncate (ie, pad and truncate at left) - # always includes prefix - my ($sz, $whole, $prefix) = @_; +sub rjustt ($$$;$) { + # right justify and truncate (ie, pad and truncate at left) + # always includes prefix + # sets $included{$what} + my ($sz, $what, $whole, $prefix) = @_; $prefix //= ''; my $lw = length $whole; my $spare = $sz - $lw - (length $prefix); + $included{$what}= 1 + ($spare > 0); return ($spare > 0 ? (' ' x $spare) : ''). $prefix. substr($whole, ($spare < 0 ? -$spare : 0)); } -sub ljustt ($$;$) { - my ($sz, $whole, $suffix) = @_; +sub ljustt ($$$;$) { + my ($sz, $what, $whole, $suffix) = @_; $suffix //= ''; $sz -= length $suffix; + $included{$what} = 1 + ($sz >= length $whole); return sprintf "%-${sz}.${sz}s%s", $whole, $suffix; } +sub genform_prep() { + $included{$_}=0 foreach qw(Objid Count); +} + sub genform ($@) { my ($form, @lines) = @_; gentextmodule($form, @lines); @@ -456,6 +465,7 @@ sub genform ($@) { Chars => (length join '', @lines), Lines => (scalar @lines), Ambiguous => ($form =~ m/Full/ && !grep { m/\W/ } @lines), + Included => { %included }, }; push @forms, $f; } @@ -533,39 +543,44 @@ sub do_git () { print STDERR join ' ', map { $_ // '?' } "-- commitid", $git_object, $git_dirty, $git_count, "--\n"; - foreach my $sz (2..10) { + foreach my $sz (2..10, qw(12 14 16)) { gentextmodule_demo_start_batch(); if (defined($git_count)) { - my $smallstr = rjustt($sz, $git_count, $git_dirty); - if (defined($git_object) && $sz >= length($git_count) + 3) { - $smallstr = $git_object; - $smallstr .= ($git_dirty || ' '); - $smallstr .= $git_count; - $smallstr = rjustt($sz, $smallstr); + genform_prep(); + my $smallstr = rjustt($sz, 'Count', $git_count, $git_dirty); + my $forgitobj = $sz - length($git_count) - 1; + if (defined($git_object) && $forgitobj >= 2) { + $smallstr = ljustt($forgitobj, 'Objid', $git_object). + ($git_dirty || ' '). + $git_count; } genform_plusq("Small$sz", $smallstr); } - genform_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty)) + genform_prep(); + genform_plusq("Git$sz", ljustt($sz, 'Objid', $git_object, $git_dirty)) if defined $git_object; - if (defined $git_count && defined $git_object) { + if (defined $git_count && defined $git_object && $sz<=10) { + genform_prep(); genform("Full".($sz*2), - ljustt($sz, $git_object), - rjustt($sz, $git_count, $git_dirty)); + ljustt($sz, 'Objid', $git_object), + rjustt($sz, 'Count', $git_count, $git_dirty)); + genform_prep(); my $e = $sz; genform("Full".($e*3)."T", - ljustt($e*2, $git_object, $git_dirty) + ljustt($e*2, 'Objid', $git_object, $git_dirty) =~ m/.{$e}/g, - rjustt($e, $git_count)); + rjustt($e, 'Count', $git_count)); } } } sub do_some_best ($$) { - my ($modname, $formre) = @_; + my ($bestwhat, $formre) = @_; + my $modname = "Best$bestwhat"; my $fullmodname = "Commitid_${modname}_2D"; my @argl = qw(max_sz margin=Commitid_pixelsz()); p "module $fullmodname(".argl_formal(@argl).") {\n"; @@ -575,6 +590,7 @@ sub do_some_best ($$) { my @do; foreach my $f ( sort { + $b->{Included}{$bestwhat} <=> $a->{Included}{$bestwhat} or $b->{Chars} <=> $a->{Chars} or $a->{Lines} <=> $b->{Chars} } @@ -628,8 +644,8 @@ sub do_git_best () { # (decreasing), and then by number of lines (increasing) and # try each one both ways round. - do_some_best('BestCount', 'Small|Full') if $do_git =~ m/c/; - do_some_best('BestObjid', 'Git|Full') if $do_git =~ m/o/; + do_some_best('Count', 'Small|Full') if $do_git =~ m/c/; + do_some_best('Objid', 'Git|Full') if $do_git =~ m/o/; } while (@ARGV) {