From 75702a381ac408ebe78e237c729b295dc9d7bb49 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Sat, 12 Nov 2016 03:18:54 -0800 Subject: [PATCH] Util.pm: add is_git_dir function The is_git_dir function returns true if Git would recognize the specified directory as a Git directory. Signed-off-by: Kyle J. McKay --- Girocco/Util.pm | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Girocco/Util.pm b/Girocco/Util.pm index eeb94c3..62b8fa0 100644 --- a/Girocco/Util.pm +++ b/Girocco/Util.pm @@ -22,7 +22,7 @@ BEGIN { calc_bigfilethreshold has_reserved_suffix noFatalsToBrowser calc_redeltathreshold clean_email_multi read_HEAD_symref read_config_file - read_config_file_hash); + read_config_file_hash is_git_dir); } my $encoder; @@ -1141,4 +1141,28 @@ sub read_config_file_hash { return \%config; } +# similar to Git's test except that GIT_OBJECT_DIRECTORY is ignored +sub is_git_dir { + my $gd = shift; + defined($gd) && $gd ne "" && -d $gd or return undef; + -d "$gd/objects" && -x "$gd/objects" or return 0; + -d "$gd/refs" && -x "$gd/refs" or return 0; + if (-l "$gd/HEAD") { + my $rl = readlink("$gd/HEAD"); + defined($rl) && $rl =~ m,^refs/., or return 0; + -e "$gd/HEAD" or return 1; + } + open my $fd, '<', "$gd/HEAD" or return 0; + my $hv; + { + local $/; + $hv = <$fd>; + } + close $fd; + defined $hv or return 0; + chomp $hv; + $hv =~ m,^ref:\s*refs/., and return 1; + return $hv =~ /^[0-9a-f]{40}/; +} + 1; -- 2.11.4.GIT