|
5 | 5 |
|
6 | 6 | my $dbixs_rev_file = "dbixs_rev.h";
|
7 | 7 |
|
8 |
| -my $is_make_dist; |
9 |
| -my $svnversion; |
10 |
| - |
11 |
| -if (is_dbi_svn_dir(".")) { |
12 |
| - $svnversion = `svnversion -n`; |
13 |
| -} |
14 |
| -elsif (is_dbi_svn_dir("..")) { |
15 |
| - # presumably we're in a subdirectory because the user is doing a 'make dist' |
16 |
| - $svnversion = `svnversion -n ..`; |
17 |
| - $is_make_dist = 1; |
18 |
| -} |
19 |
| -else { |
20 |
| - # presumably we're being run by an end-user because their file timestamps |
21 |
| - # got messed up |
22 |
| - print "Skipping regeneration of $dbixs_rev_file\n"; |
23 |
| - utime(time(), time(), $dbixs_rev_file); # update modification time |
| 8 | +sub skip_update { |
| 9 | + my $reason = shift; |
| 10 | + print "Skipping regeneration of $dbixs_rev_file: ", $reason, "\n"; |
| 11 | + utime (time (), time (), $dbixs_rev_file); # update modification time |
24 | 12 | exit 0;
|
25 |
| -} |
26 |
| - |
27 |
| -my @warn; |
28 |
| -die "Neither current directory nor parent directory are an svn working copy\n" |
29 |
| - unless $svnversion and $svnversion =~ m/^\d+/; |
30 |
| -push @warn, "Mixed revision working copy ($svnversion:$1)" |
31 |
| - if $svnversion =~ s/:(\d+)//; |
32 |
| -push @warn, "Code modified since last checkin" |
33 |
| - if $svnversion =~ s/[MS]+$//; |
34 |
| -warn "$dbixs_rev_file warning: $_\n" for @warn; |
35 |
| -die "$0 failed\n" if $is_make_dist && @warn; |
36 |
| - |
37 |
| -write_header($dbixs_rev_file, DBIXS_REVISION => $svnversion, \@warn); |
38 |
| - |
39 |
| -sub write_header { |
40 |
| - my ($file, $macro, $version, $comments_ref) = @_; |
41 |
| - open my $fh, ">$file" or die "Can't open $file: $!\n"; |
42 |
| - unshift @$comments_ref, scalar localtime(time); |
43 |
| - print $fh "/* $_ */\n" for @$comments_ref; |
44 |
| - print $fh "#define $macro $version\n"; |
45 |
| - close $fh or die "Error closing $file: $!\n"; |
46 |
| - print "Wrote $macro $version to $file\n"; |
47 |
| -} |
48 |
| - |
49 |
| -sub is_dbi_svn_dir { |
50 |
| - my ($dir) = @_; |
51 |
| - return (-d "$dir/.svn" && -f "$dir/MANIFEST.SKIP"); |
52 |
| -} |
| 13 | + } # skip_update |
53 | 14 |
|
| 15 | +-d ".git" or skip_update ("No git env"); |
| 16 | + |
| 17 | +my @n = eval { qx{git log --pretty=oneline} }; |
| 18 | +@n or skip_update ("Git log was empty"); |
| 19 | + |
| 20 | +open my $fh, ">$dbixs_rev_file" or die "Can't open $dbixs_rev_file: $!\n"; |
| 21 | +print $fh "/* ", scalar localtime, " */\n"; |
| 22 | + |
| 23 | +chomp (my @st = qx{git status -s --show-stash}); |
| 24 | +print $fh "/* $_ */\n" for grep { !m/\b$dbixs_rev_file\b/ } @st; |
| 25 | + |
| 26 | +my $def = "DBIXS_REVISION"; |
| 27 | +my $rev = scalar @n; |
| 28 | +print $fh "#define $def $rev\n"; |
| 29 | +close $fh or die "Error closing $dbixs_rev_file: $!\n"; |
| 30 | +print "Wrote $def $rev to $dbixs_rev_file\n"; |
0 commit comments