[PATCH] git-svn: Use git-config --path for pathname-valued variables
From: Alex Plotnick <hidden>
Date: 2016-06-15 22:53:16
Subsystem:
the rest · Maintainer:
Linus Torvalds
read_git_config automatically converts Getopt::Long-style option specs to calls to git-config. It already provided type specifiers for integer and boolean-valued config variables, but did not handle pathnames specially. Thus, seemingly reasonable settings like "svn.authorsfile = ~/svn-authors" could cause commands to fail since the leading tilde was not expanded. Because Getopt::Long specs do not provide a specific flag for paths, we use the heuristic that string-valued options whose names end in "file" should be treated as pathnames. This patch also makes it clearer that at most one type specifier will be used. Signed-off-by: Alex Plotnick <redacted> --- git-svn.perl | 9 +++++++-- t/t9130-git-svn-authors-file.sh | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl
index 4334b95..5b065d6 100755
--- a/git-svn.perl
+++ b/git-svn.perl@@ -1810,8 +1810,13 @@ sub read_git_config { my ($key) = ($o =~ /^([a-zA-Z\-]+)/); $key =~ s/-//g; my $arg = 'git config'; - $arg .= ' --int' if ($o =~ /[:=]i$/); - $arg .= ' --bool' if ($o !~ /[:=][sfi]$/); + if ($o =~ /[:=]i$/) { + $arg .= ' --int'; + } elsif ($o !~ /[:=][sfi]$/) { + $arg .= ' --bool'; + } elsif ($o =~ /[:=]s$/ && $key =~ /file$/) { + $arg .= ' --path'; + } if (ref $v eq 'ARRAY') { chomp(my @tmp = `$arg --get-all svn.$key`); @$v = @tmp if @tmp;
diff --git a/t/t9130-git-svn-authors-file.sh b/t/t9130-git-svn-authors-file.sh
index c3443ce..aa50183 100755
--- a/t/t9130-git-svn-authors-file.sh
+++ b/t/t9130-git-svn-authors-file.sh@@ -98,9 +98,8 @@ test_expect_success 'fresh clone with svn.authors-file in config' ' test_config="$HOME"/.gitconfig && sane_unset GIT_DIR && sane_unset GIT_CONFIG && - git config --global \ - svn.authorsfile "$HOME"/svn-authors && - test x"$HOME"/svn-authors = x"$(git config svn.authorsfile)" && + git config --global svn.authorsfile "~/svn-authors" && + test x"$HOME"/svn-authors = x"$(git config --path svn.authorsfile)" && git svn clone "$svnrepo" gitconfig.clone && cd gitconfig.clone && nr_ex=$(git log | grep "^Author:.*example.com" | wc -l) &&
--
1.7.9.2