From: Junio C Hamano Date: Wed, 30 Jan 2008 08:01:06 GMT Subject: Re: [PATCH] git-relink: avoid hard linking in objects/info directory Message-ID: <7vd4rjivy5.fsf@gitster.siamese.dyndns.org> In-Reply-To: "Rafael Garcia-Suarez" writes: >> opendir(D,$master_dir . "objects/") >> or die "Failed to open $master_dir/objects/ : $!"; >> >> -my @hashdirs = grep !/^\.{1,2}$/, readdir(D); >> +my @hashdirs = grep !/^(\.{1,2}|info)$/, readdir(D); > > That looks a bit fragile. If the intent is to get a list of files in > $master_dir, why not simply say: > > my @hashdirs = grep -f, readdir(D); > > That will appropriately skip ., .. and any other dirs. The statement is trying to find directories whose names match /^[0-9a-f]{2}$/ (two hexdigits) or /^pack$/. But I do agree that listing things to skip is a fragile approach than listing things you know are safe to relink. How about doing it this way instead? git-relink.perl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/git-relink.perl b/git-relink.perl index f6b4f6a..9101926 100755 --- a/git-relink.perl +++ b/git-relink.perl @@ -40,7 +40,7 @@ my $master_dir = pop @dirs; opendir(D,$master_dir . "objects/") or die "Failed to open $master_dir/objects/ : $!"; -my @hashdirs = grep !/^\.{1,2}$/, readdir(D); +my @hashdirs = grep { ($_ eq 'pack') || /^[0-9a-f]{2}$/ } readdir(D); foreach my $repo (@dirs) { $linked = 0;