Fossil SCM

Added tools/fossil-diff-log script, emulating "git log -p", the feature having been requested twice now on the forum.

wyoung 2020-05-03 18:25 trunk
Commit 836d6b4f2110a41df3bd8d304faaa434b2474dff5a1e6e19420c49ba5d1fb06d
1 file changed +59
--- a/tools/fossil-diff-log
+++ b/tools/fossil-diff-log
@@ -0,0 +1,59 @@
1
+#!/usr/bin/env perl
2
+nteractive
3
+# ...etc...
4
+
5
+use strict;
6
+use warnings;
7
+
8
+use Carp;
9
+use File::Which;
10
+use IO::Interactive qw(is_interactive);
11
+
12
+die "usage: $0 <files...>\n\n" unless @ARGV;
13
+
14
+my $out;
15
+if (is_interactive()) {
16
+ my $pager = $ENV{PAGER} || which('less') || which('more');
17
+ open $out, '|-', $pager or croak "Cannot pipe to $pager: $!";
18
+}
19
+else {
20
+ $out = *STDOUT;
21
+}
22
+
23
+open my $bcmd, '-|', 'fossil branch current'
24
+ or die "Cannot get branch: $!\n";
25
+my $cbranch = <$bcmd>;
26
+chomp $cbranch;
27
+close $bcmd;
28
+
29
+for my $file (@ARGV) {
30
+ my $lastckid;
31
+ open my $finfo, '-|', "fossil finfo --brief --limit 0 '$file'"
32
+ or die "Failed to get file info: $!\n";
33
+ my @filines = <$finfo>;
34
+ close $finfo;
35
+
36
+ for my $line (@filines) {
37
+ my ($currckid, $date, $user, $branch, @cwords) = split ' ', $line;
38
+ next unless $branch eq $cbranch;
39
+ if (defined $lastckid and defined $branch) {
40
+ my $comment = join ' ', @cwords;
41
+ open my $diff, '
42
+ '--to', $lastckid,
43
+ or die "Failed to diff $currckid -> $lastckid: $!\n";
44
+ my @dl = <$diff>;
45
+ close $diff;
46
+ my $patch = join '', @dl;
47
+
48
+ print $out <<"OUT"
49
+Checkin ID $currckid to $branch by $user on $date
50
+Comment: $comment
51
+
52
+$patch
53
+
54
+OUT
55
+ }
56
+
57
+ $lastckid = $currckid;
58
+ }
59
+}
--- a/tools/fossil-diff-log
+++ b/tools/fossil-diff-log
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/tools/fossil-diff-log
+++ b/tools/fossil-diff-log
@@ -0,0 +1,59 @@
1 #!/usr/bin/env perl
2 nteractive
3 # ...etc...
4
5 use strict;
6 use warnings;
7
8 use Carp;
9 use File::Which;
10 use IO::Interactive qw(is_interactive);
11
12 die "usage: $0 <files...>\n\n" unless @ARGV;
13
14 my $out;
15 if (is_interactive()) {
16 my $pager = $ENV{PAGER} || which('less') || which('more');
17 open $out, '|-', $pager or croak "Cannot pipe to $pager: $!";
18 }
19 else {
20 $out = *STDOUT;
21 }
22
23 open my $bcmd, '-|', 'fossil branch current'
24 or die "Cannot get branch: $!\n";
25 my $cbranch = <$bcmd>;
26 chomp $cbranch;
27 close $bcmd;
28
29 for my $file (@ARGV) {
30 my $lastckid;
31 open my $finfo, '-|', "fossil finfo --brief --limit 0 '$file'"
32 or die "Failed to get file info: $!\n";
33 my @filines = <$finfo>;
34 close $finfo;
35
36 for my $line (@filines) {
37 my ($currckid, $date, $user, $branch, @cwords) = split ' ', $line;
38 next unless $branch eq $cbranch;
39 if (defined $lastckid and defined $branch) {
40 my $comment = join ' ', @cwords;
41 open my $diff, '
42 '--to', $lastckid,
43 or die "Failed to diff $currckid -> $lastckid: $!\n";
44 my @dl = <$diff>;
45 close $diff;
46 my $patch = join '', @dl;
47
48 print $out <<"OUT"
49 Checkin ID $currckid to $branch by $user on $date
50 Comment: $comment
51
52 $patch
53
54 OUT
55 }
56
57 $lastckid = $currckid;
58 }
59 }

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button