ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/vendor/perl/5.18.1/Porting/GitUtils.pm
Revision: 3783
Committed: Thu Feb 17 12:49:46 2011 UTC (13 years, 3 months ago) by laffer1
Original Path: branches/PERL/contrib/perl/Porting/GitUtils.pm
File size: 2431 byte(s)
Log Message:
Virgin import (trimmed) of Perl 5.10.1

File Contents

# User Rev Content
1 laffer1 3783 #!/usr/bin/perl
2     use strict;
3     use warnings;
4     use POSIX qw(strftime);
5    
6     use base qw/Exporter/;
7     our @EXPORT_OK=qw(iso_time_with_dot gen_dot_patch);
8    
9     sub iso_time_with_dot {
10     strftime "%Y-%m-%d.%H:%M:%S",gmtime(shift||time)
11     }
12    
13     # generate the contents of a .patch file for an arbitrary commitish, or for HEAD if none is supplied
14     # assumes the CWD is inside of a perl git repository. If the repository is bare then refs/heads/*
15     # is used to determine the branch. If the repository is not bare then refs/remotes/origin/* is used
16     # to determine the branch. (The assumption being that if its bare then this is running inside of
17     # the master git repo - if its not bare then it is a checkout which may not have all the branches)
18     sub gen_dot_patch {
19     my $target= shift || 'HEAD';
20     chomp(my ($git_dir, $is_bare, $sha1)=`git rev-parse --git-dir --is-bare-repository $target`);
21     die "Not in a git repository!" if !$git_dir;
22     $is_bare= "" if $is_bare and $is_bare eq 'false';
23    
24     # which branches to scan - the order here is important, the first hit we find we use
25     # so if two branches can both reach a ref we want the right one first.
26     my @branches=(
27     'blead',
28     'maint-5.10',
29     'maint-5.8',
30     'maint-5.8-dor',
31     'maint-5.6',
32     'maint-5.005',
33     'maint-5.004',
34     # and more generalized searches...
35     'refs/heads/*',
36     'refs/remotes/*',
37     'refs/*',
38     );
39     my $reftype= $is_bare ? "heads" : "remotes/origin";
40     my $branch;
41     foreach my $name (@branches) {
42     my $refs= $name=~m!^refs/! ? $name : "refs/$reftype/$name";
43     my $cmd= "git name-rev --name-only --refs=$refs $sha1";
44     chomp($branch= `$cmd`);
45     last if $branch ne 'undefined';
46     }
47     for ($branch) {
48     $_ ||= "error"; # hmm, we didnt get /anything/ from name-rev?
49     s!^\Q$reftype\E/!! || # strip off the reftype
50     s!^refs/heads/!! || # possible other places it was found
51     s!^refs/remotes/!! || # ...
52     s!^refs/!!; # might even be a tag or something weirdo...
53     s![~^].*\z!!; # strip off how far we are from the item
54     }
55     my $tstamp= iso_time_with_dot(`git log -1 --pretty="format:%ct" $sha1`);
56     chomp(my $describe= `git describe $sha1`);
57     join(" ", $branch, $tstamp, $sha1, $describe);
58     }
59    
60     1;

Properties

Name Value
cvs2svn:cvs-rev 1.1.1.1