|
1 # Copyright (C) 2007 Apple Inc. All rights reserved. |
|
2 # |
|
3 # Redistribution and use in source and binary forms, with or without |
|
4 # modification, are permitted provided that the following conditions |
|
5 # are met: |
|
6 # |
|
7 # 1. Redistributions of source code must retain the above copyright |
|
8 # notice, this list of conditions and the following disclaimer. |
|
9 # 2. Redistributions in binary form must reproduce the above copyright |
|
10 # notice, this list of conditions and the following disclaimer in the |
|
11 # documentation and/or other materials provided with the distribution. |
|
12 # 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
|
13 # its contributors may be used to endorse or promote products derived |
|
14 # from this software without specific prior written permission. |
|
15 # |
|
16 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
|
17 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
18 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
19 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
|
20 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
21 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
22 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
23 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
25 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
26 |
|
27 # Module to share code to work with various version control systems. |
|
28 |
|
29 use strict; |
|
30 use warnings; |
|
31 use File::Spec; |
|
32 |
|
33 BEGIN { |
|
34 use Exporter (); |
|
35 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); |
|
36 $VERSION = 1.00; |
|
37 @ISA = qw(Exporter); |
|
38 @EXPORT = qw(&isGitDirectory &isGit &isSVNDirectory &isSVN &makeFilePathRelative); |
|
39 %EXPORT_TAGS = ( ); |
|
40 @EXPORT_OK = (); |
|
41 } |
|
42 |
|
43 our @EXPORT_OK; |
|
44 |
|
45 my $isGit; |
|
46 my $isSVN; |
|
47 |
|
48 sub isGitDirectory($) |
|
49 { |
|
50 my ($dir) = @_; |
|
51 return system("cd $dir && git rev-parse > /dev/null 2>&1") == 0; |
|
52 } |
|
53 |
|
54 sub isGit() |
|
55 { |
|
56 return $isGit if defined $isGit; |
|
57 |
|
58 $isGit = isGitDirectory("."); |
|
59 return $isGit; |
|
60 } |
|
61 |
|
62 sub isSVNDirectory($) |
|
63 { |
|
64 my ($dir) = @_; |
|
65 |
|
66 return -d File::Spec->catdir($dir, ".svn"); |
|
67 } |
|
68 |
|
69 sub isSVN() |
|
70 { |
|
71 return $isSVN if defined $isSVN; |
|
72 |
|
73 $isSVN = isSVNDirectory("."); |
|
74 return $isSVN; |
|
75 } |
|
76 |
|
77 my $gitRoot; |
|
78 sub makeFilePathRelative($) |
|
79 { |
|
80 my ($path) = @_; |
|
81 return $path unless isGit(); |
|
82 |
|
83 unless (defined $gitRoot) { |
|
84 chomp($gitRoot = `git rev-parse --git-dir`); |
|
85 $gitRoot =~ s/\.git$//; |
|
86 } |
|
87 my $result = File::Spec->abs2rel(File::Spec->rel2abs($path, $gitRoot)); |
|
88 return $result; |
|
89 } |
|
90 |
|
91 1; |