]>
Commit | Line | Data |
---|---|---|
aaebf433 RA |
1 | #!/usr/bin/perl |
2 | # Copyright 2004 - Ryan Anderson <ryan@michonline.com> GPL v2 | |
3 | ||
4 | use strict; | |
5 | use warnings; | |
6 | use Digest::MD5; | |
7 | require 5.006; | |
8 | ||
9 | if (@ARGV != 1) { | |
10 | print <<EOT; | |
11 | Usage: setlocalversion <srctree> | |
12 | EOT | |
13 | exit(1); | |
14 | } | |
15 | ||
16 | my ($srctree) = @ARGV; | |
17 | chdir($srctree); | |
18 | ||
19 | my @LOCALVERSIONS = (); | |
20 | ||
21 | # We are going to use the following commands to try and determine if this | |
22 | # repository is at a Version boundary (i.e, 2.6.10 vs 2.6.10 + some patches) We | |
23 | # currently assume that all meaningful version boundaries are marked by a tag. | |
24 | # We don't care what the tag is, just that something exists. | |
25 | ||
26 | # Git/Cogito store the top-of-tree "commit" in .git/HEAD | |
27 | # A list of known tags sits in .git/refs/tags/ | |
28 | # | |
29 | # The simple trick here is to just compare the two of these, and if we get a | |
30 | # match, return nothing, otherwise, return a subset of the SHA-1 hash in | |
31 | # .git/HEAD | |
32 | ||
33 | sub do_git_checks { | |
34 | open(H,"<.git/HEAD") or return; | |
35 | my $head = <H>; | |
36 | chomp $head; | |
37 | close(H); | |
38 | ||
39 | opendir(D,".git/refs/tags") or return; | |
40 | foreach my $tagfile (grep !/^\.{1,2}$/, readdir(D)) { | |
41 | open(F,"<.git/refs/tags/" . $tagfile) or return; | |
42 | my $tag = <F>; | |
43 | chomp $tag; | |
44 | close(F); | |
45 | return if ($tag eq $head); | |
46 | } | |
47 | closedir(D); | |
48 | ||
49 | push @LOCALVERSIONS, "g" . substr($head,0,8); | |
50 | } | |
51 | ||
52 | if ( -d ".git") { | |
53 | do_git_checks(); | |
54 | } | |
55 | ||
56 | printf "-%s\n", join("-",@LOCALVERSIONS) if (scalar @LOCALVERSIONS > 0); |