{"thread":{"id":"43087","subject":"[PATCH] git-svn: exit with status 1 for test failures","startedAt":"2006-11-25T06:38:17Z","lastAt":"2006-12-02T22:40:10Z","messageCount":5,"participants":["Eric Wong","Sam Vilain"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"297922","messageId":"11644366982320-git-send-email-normalperson@yhbt.net","threadId":"43087","inReplyTo":null,"subject":"[PATCH] git-svn: correctly access repos when only given partial read permissions","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2006-11-25T06:38:17Z","receivedAt":"2006-11-25T06:38:17Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Sometimes users are given only read access to a subtree inside a\nrepository, and git-svn could not read log information (and thus\nfetch commits) when connecting a session to the root of the\nrepository.  We now start an SVN::Ra session with the full URL\nof what we're tracking, and not the repository root as before.\n\nThis change was made much easier with a cleanup of\nrepo_path_split() usage as well as improving the accounting of\nauthentication batons.\n\nSigned-off-by: Eric Wong <normalperson@yhbt.net>\n---\n git-svn.perl |  137 +++++++++++++++++++++++++++------------------------------\n 1 files changed, 65 insertions(+), 72 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 47cd3e2..5d67771 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -39,7 +39,7 @@ memoize('revisions_eq');\n memoize('cmt_metadata');\n memoize('get_commit_time');\n \n-my ($SVN_PATH, $SVN, $SVN_LOG, $_use_lib, $AUTH_BATON, $AUTH_CALLBACKS);\n+my ($SVN, $_use_lib);\n \n sub nag_lib {\n \tprint STDERR <<EOF;\n@@ -381,10 +381,7 @@ sub fetch_cmd {\n sub fetch_lib {\n \tmy (@parents) = @_;\n \t$SVN_URL ||= file_to_s(\"$GIT_SVN_DIR/info/url\");\n-\tmy $repo;\n-\t($repo, $SVN_PATH) = repo_path_split($SVN_URL);\n-\t$SVN_LOG ||= libsvn_connect($repo);\n-\t$SVN ||= libsvn_connect($repo);\n+\t$SVN ||= libsvn_connect($SVN_URL);\n \tmy ($last_rev, $last_commit) = svn_grab_base_rev();\n \tmy ($base, $head) = libsvn_parse_revision($last_rev);\n \tif ($base > $head) {\n@@ -426,7 +423,7 @@ sub fetch_lib {\n \t\t\t# performance sucks with it enabled, so it's much\n \t\t\t# faster to fetch revision ranges instead of relying\n \t\t\t# on the limiter.\n-\t\t\tlibsvn_get_log($SVN_LOG, '/'.$SVN_PATH,\n+\t\t\tlibsvn_get_log(libsvn_dup_ra($SVN), [''],\n \t\t\t\t\t$min, $max, 0, 1, 1,\n \t\t\t\tsub {\n \t\t\t\t\tmy $log_msg;\n@@ -528,7 +525,6 @@ sub commit_lib {\n \tmy $commit_msg = \"$GIT_SVN_DIR/.svn-commit.tmp.$$\";\n \n \tmy $repo;\n-\t($repo, $SVN_PATH) = repo_path_split($SVN_URL);\n \tset_svn_commit_env();\n \tforeach my $c (@revs) {\n \t\tmy $log_msg = get_commit_message($c, $commit_msg);\n@@ -537,13 +533,11 @@ sub commit_lib {\n \t\t# can't track down... (it's probably in the SVN code)\n \t\tdefined(my $pid = open my $fh, '-|') or croak $!;\n \t\tif (!$pid) {\n-\t\t\t$SVN_LOG = libsvn_connect($repo);\n-\t\t\t$SVN = libsvn_connect($repo);\n \t\t\tmy $ed = SVN::Git::Editor->new(\n \t\t\t\t\t{\tr => $r_last,\n-\t\t\t\t\t\tra => $SVN_LOG,\n+\t\t\t\t\t\tra => libsvn_dup_ra($SVN),\n \t\t\t\t\t\tc => $c,\n-\t\t\t\t\t\tsvn_path => $SVN_PATH\n+\t\t\t\t\t\tsvn_path => $SVN->{svn_path},\n \t\t\t\t\t},\n \t\t\t\t\t$SVN->get_commit_editor(\n \t\t\t\t\t\t$log_msg->{msg},\n@@ -661,10 +655,9 @@ sub show_ignore_cmd {\n \n sub show_ignore_lib {\n \tmy $repo;\n-\t($repo, $SVN_PATH) = repo_path_split($SVN_URL);\n-\t$SVN ||= libsvn_connect($repo);\n+\t$SVN ||= libsvn_connect($SVN_URL);\n \tmy $r = defined $_revision ? $_revision : $SVN->get_latest_revnum;\n-\tlibsvn_traverse_ignore(\\*STDOUT, $SVN_PATH, $r);\n+\tlibsvn_traverse_ignore(\\*STDOUT, $SVN->{svn_path}, $r);\n }\n \n sub graft_branches {\n@@ -790,7 +783,7 @@ sub show_log {\n \t\t} elsif (/^:\\d{6} \\d{6} $sha1_short/o) {\n \t\t\tpush @{$c->{raw}}, $_;\n \t\t} elsif (/^[ACRMDT]\\t/) {\n-\t\t\t# we could add $SVN_PATH here, but that requires\n+\t\t\t# we could add $SVN->{svn_path} here, but that requires\n \t\t\t# remote access at the moment (repo_path_split)...\n \t\t\ts#^([ACRMDT])\\t#   $1 #;\n \t\t\tpush @{$c->{changed}}, $_;\n@@ -856,10 +849,7 @@ sub commit_diff {\n \t\t$_message ||= get_commit_message($tb,\n \t\t\t\t\t\"$GIT_DIR/.svn-commit.tmp.$$\")->{msg};\n \t}\n-\tmy $repo;\n-\t($repo, $SVN_PATH) = repo_path_split($SVN_URL);\n-\t$SVN_LOG ||= libsvn_connect($repo);\n-\t$SVN ||= libsvn_connect($repo);\n+\t$SVN ||= libsvn_connect($SVN_URL);\n \tif ($r eq 'HEAD') {\n \t\t$r = $SVN->get_latest_revnum;\n \t} elsif ($r !~ /^\\d+$/) {\n@@ -868,8 +858,9 @@ sub commit_diff {\n \tmy @lock = $SVN::Core::VERSION ge '1.2.0' ? (undef, 0) : ();\n \tmy $rev_committed;\n \tmy $ed = SVN::Git::Editor->new({\tr => $r,\n-\t\t\t\t\t\tra => $SVN_LOG, c => $tb,\n-\t\t\t\t\t\tsvn_path => $SVN_PATH\n+\t\t\t\t\t\tra => libsvn_dup_ra($SVN),\n+\t\t\t\t\t\tc => $tb,\n+\t\t\t\t\t\tsvn_path => $SVN->{svn_path}\n \t\t\t\t\t},\n \t\t\t\t$SVN->get_commit_editor($_message,\n \t\t\t\t\tsub {\n@@ -1147,8 +1138,7 @@ sub graft_file_copy_lib {\n \tmy $tree_paths = $l_map->{$u};\n \tmy $pfx = common_prefix([keys %$tree_paths]);\n \tmy ($repo, $path) = repo_path_split($u.$pfx);\n-\t$SVN_LOG ||= libsvn_connect($repo);\n-\t$SVN ||= libsvn_connect($repo);\n+\t$SVN = libsvn_connect($repo);\n \n \tmy ($base, $head) = libsvn_parse_revision();\n \tmy $inc = 1000;\n@@ -1157,7 +1147,8 @@ sub graft_file_copy_lib {\n \t$SVN::Error::handler = \\&libsvn_skip_unknown_revs;\n \twhile (1) {\n \t\tmy $pool = SVN::Pool->new;\n-\t\tlibsvn_get_log($SVN_LOG, \"/$path\", $min, $max, 0, 1, 1,\n+\t\tlibsvn_get_log(libsvn_dup_ra($SVN), [$path],\n+\t\t               $min, $max, 0, 1, 1,\n \t\t\tsub {\n \t\t\t\tlibsvn_graft_file_copies($grafts, $tree_paths,\n \t\t\t\t\t\t\t$path, @_);\n@@ -1267,13 +1258,9 @@ sub repo_path_split {\n \t\t\treturn ($u, $full_url);\n \t\t}\n \t}\n-\n \tif ($_use_lib) {\n \t\tmy $tmp = libsvn_connect($full_url);\n-\t\tmy $url = $tmp->get_repos_root;\n-\t\t$full_url =~ s#^\\Q$url\\E/*##;\n-\t\tpush @repo_path_split_cache, qr/^(\\Q$url\\E)/;\n-\t\treturn ($url, $full_url);\n+\t\treturn ($tmp->{repos_root}, $tmp->{svn_path});\n \t} else {\n \t\tmy ($url, $path) = ($full_url =~ m!^([a-z\\+]+://[^/]*)(.*)$!i);\n \t\t$path =~ s#^/+##;\n@@ -2815,34 +2802,41 @@ sub _read_password {\n \n sub libsvn_connect {\n \tmy ($url) = @_;\n-\tif (!$AUTH_BATON || !$AUTH_CALLBACKS) {\n-\t\tSVN::_Core::svn_config_ensure($_config_dir, undef);\n-\t\t($AUTH_BATON, $AUTH_CALLBACKS) = SVN::Core::auth_open_helper([\n-\t\t    SVN::Client::get_simple_provider(),\n-\t\t    SVN::Client::get_ssl_server_trust_file_provider(),\n-\t\t    SVN::Client::get_simple_prompt_provider(\n-\t\t      \\&_simple_prompt, 2),\n-\t\t    SVN::Client::get_ssl_client_cert_prompt_provider(\n-\t\t      \\&_ssl_client_cert_prompt, 2),\n-\t\t    SVN::Client::get_ssl_client_cert_pw_prompt_provider(\n-\t\t      \\&_ssl_client_cert_pw_prompt, 2),\n-\t\t    SVN::Client::get_username_provider(),\n-\t\t    SVN::Client::get_ssl_server_trust_prompt_provider(\n-\t\t      \\&_ssl_server_trust_prompt),\n-\t\t    SVN::Client::get_username_prompt_provider(\n-\t\t      \\&_username_prompt, 2),\n-\t\t  ]);\n-\t}\n-\tSVN::Ra->new(url => $url, auth => $AUTH_BATON,\n-\t             auth_provider_callbacks => $AUTH_CALLBACKS);\n+\tSVN::_Core::svn_config_ensure($_config_dir, undef);\n+\tmy ($baton, $callbacks) = SVN::Core::auth_open_helper([\n+\t    SVN::Client::get_simple_provider(),\n+\t    SVN::Client::get_ssl_server_trust_file_provider(),\n+\t    SVN::Client::get_simple_prompt_provider(\n+\t      \\&_simple_prompt, 2),\n+\t    SVN::Client::get_ssl_client_cert_prompt_provider(\n+\t      \\&_ssl_client_cert_prompt, 2),\n+\t    SVN::Client::get_ssl_client_cert_pw_prompt_provider(\n+\t      \\&_ssl_client_cert_pw_prompt, 2),\n+\t    SVN::Client::get_username_provider(),\n+\t    SVN::Client::get_ssl_server_trust_prompt_provider(\n+\t      \\&_ssl_server_trust_prompt),\n+\t    SVN::Client::get_username_prompt_provider(\n+\t      \\&_username_prompt, 2),\n+\t  ]);\n+\tmy $ra = SVN::Ra->new(url => $url, auth => $baton,\n+\t                      pool => SVN::Pool->new,\n+\t                      auth_provider_callbacks => $callbacks);\n+\t$ra->{svn_path} = $url;\n+\t$ra->{repos_root} = $ra->get_repos_root;\n+\t$ra->{svn_path} =~ s#^\\Q$ra->{repos_root}\\E/*##;\n+\tpush @repo_path_split_cache, qr/^(\\Q$ra->{repos_root}\\E)/;\n+\treturn $ra;\n+}\n+\n+sub libsvn_dup_ra {\n+\tmy ($ra) = @_;\n+\tSVN::Ra->new(map { $_ => $ra->{$_} }\n+\t             qw/url auth auth_provider_callbacks repos_root svn_path/);\n }\n \n sub libsvn_get_file {\n \tmy ($gui, $f, $rev, $chg) = @_;\n-\tmy $p = $f;\n-\tif (length $SVN_PATH > 0) {\n-\t\treturn unless ($p =~ s#^\\Q$SVN_PATH\\E/##);\n-\t}\n+\t$f =~ s#^/##;\n \tprint \"\\t$chg\\t$f\\n\" unless $_q;\n \n \tmy ($hash, $pid, $in, $out);\n@@ -2879,7 +2873,7 @@ sub libsvn_get_file {\n \t\twaitpid $pid, 0;\n \t\t$hash =~ /^$sha1$/o or die \"not a sha1: $hash\\n\";\n \t}\n-\tprint $gui $mode,' ',$hash,\"\\t\",$p,\"\\0\" or croak $!;\n+\tprint $gui $mode,' ',$hash,\"\\t\",$f,\"\\0\" or croak $!;\n }\n \n sub libsvn_log_entry {\n@@ -2897,7 +2891,6 @@ sub libsvn_log_entry {\n \n sub process_rm {\n \tmy ($gui, $last_commit, $f) = @_;\n-\t$f =~ s#^\\Q$SVN_PATH\\E/?## or return;\n \t# remove entire directories.\n \tif (safe_qx('git-ls-tree',$last_commit,'--',$f) =~ /^040000 tree/) {\n \t\tdefined(my $pid = open my $ls, '-|') or croak $!;\n@@ -2919,9 +2912,11 @@ sub libsvn_fetch {\n \tmy ($last_commit, $paths, $rev, $author, $date, $msg) = @_;\n \topen my $gui, '| git-update-index -z --index-info' or croak $!;\n \tmy @amr;\n+\tmy $p = $SVN->{svn_path};\n \tforeach my $f (keys %$paths) {\n \t\tmy $m = $paths->{$f}->action();\n-\t\t$f =~ s#^/+##;\n+\t\t$f =~ s#^/\\Q$p\\E/##;\n+\t\tnext if $f =~ m#^/#;\n \t\tif ($m =~ /^[DR]$/) {\n \t\t\tprint \"\\t$m\\t$f\\n\" unless $_q;\n \t\t\tprocess_rm($gui, $last_commit, $f);\n@@ -3011,9 +3006,9 @@ sub libsvn_parse_revision {\n \n sub libsvn_traverse {\n \tmy ($gui, $pfx, $path, $rev, $files) = @_;\n-\tmy $cwd = \"$pfx/$path\";\n+\tmy $cwd = length $pfx ? \"$pfx/$path\" : $path;\n \tmy $pool = SVN::Pool->new;\n-\t$cwd =~ s#^/+##g;\n+\t$cwd =~ s#^\\Q$SVN->{svn_path}\\E##;\n \tmy ($dirent, $r, $props) = $SVN->get_dir($cwd, $rev, $pool);\n \tforeach my $d (keys %$dirent) {\n \t\tmy $t = $dirent->{$d}->kind;\n@@ -3037,7 +3032,7 @@ sub libsvn_traverse_ignore {\n \tmy $pool = SVN::Pool->new;\n \tmy ($dirent, undef, $props) = $SVN->get_dir($path, $r, $pool);\n \tmy $p = $path;\n-\t$p =~ s#^\\Q$SVN_PATH\\E/?##;\n+\t$p =~ s#^\\Q$SVN->{svn_path}\\E/##;\n \tprint $fh length $p ? \"\\n# $p\\n\" : \"\\n# /\\n\";\n \tif (my $s = $props->{'svn:ignore'}) {\n \t\t$s =~ s/[\\r\\n]+/\\n/g;\n@@ -3064,7 +3059,7 @@ sub revisions_eq {\n \tif ($_use_lib) {\n \t\t# should be OK to use Pool here (r1 - r0) should be small\n \t\tmy $pool = SVN::Pool->new;\n-\t\tlibsvn_get_log($SVN, \"/$path\", $r0, $r1,\n+\t\tlibsvn_get_log($SVN, [$path], $r0, $r1,\n \t\t\t\t0, 1, 1, sub {$nr++}, $pool);\n \t\t$pool->clear;\n \t} else {\n@@ -3079,7 +3074,7 @@ sub revisions_eq {\n \n sub libsvn_find_parent_branch {\n \tmy ($paths, $rev, $author, $date, $msg) = @_;\n-\tmy $svn_path = '/'.$SVN_PATH;\n+\tmy $svn_path = '/'.$SVN->{svn_path};\n \n \t# look for a parent from another branch:\n \tmy $i = $paths->{$svn_path} or return;\n@@ -3090,7 +3085,7 @@ sub libsvn_find_parent_branch {\n \t$branch_from =~ s#^/##;\n \tmy $l_map = {};\n \tread_url_paths_all($l_map, '', \"$GIT_DIR/svn\");\n-\tmy $url = $SVN->{url};\n+\tmy $url = $SVN->{repos_root};\n \tdefined $l_map->{$url} or return;\n \tmy $id = $l_map->{$url}->{$branch_from};\n \tif (!defined $id && $_follow_parent) {\n@@ -3112,7 +3107,7 @@ sub libsvn_find_parent_branch {\n \t\t\t$GIT_SVN = $ENV{GIT_SVN_ID} = $id;\n \t\t\tinit_vars();\n \t\t\t$SVN_URL = \"$url/$branch_from\";\n-\t\t\t$SVN_LOG = $SVN = undef;\n+\t\t\t$SVN = undef;\n \t\t\tsetup_git_svn();\n \t\t\t# we can't assume SVN_URL exists at r+1:\n \t\t\t$_revision = \"0:$r\";\n@@ -3149,7 +3144,7 @@ sub libsvn_new_tree {\n \t}\n \tmy ($paths, $rev, $author, $date, $msg) = @_;\n \topen my $gui, '| git-update-index -z --index-info' or croak $!;\n-\tlibsvn_traverse($gui, '', $SVN_PATH, $rev);\n+\tlibsvn_traverse($gui, '', $SVN->{svn_path}, $rev);\n \tclose $gui or croak $?;\n \treturn libsvn_log_entry($rev, $author, $date, $msg);\n }\n@@ -3234,11 +3229,10 @@ sub libsvn_commit_cb {\n \n sub libsvn_ls_fullurl {\n \tmy $fullurl = shift;\n-\tmy ($repo, $path) = repo_path_split($fullurl);\n-\t$SVN ||= libsvn_connect($repo);\n+\t$SVN ||= libsvn_connect($fullurl);\n \tmy @ret;\n \tmy $pool = SVN::Pool->new;\n-\tmy ($dirent, undef, undef) = $SVN->get_dir($path,\n+\tmy ($dirent, undef, undef) = $SVN->get_dir($SVN->{svn_path},\n \t\t\t\t\t\t$SVN->get_latest_revnum, $pool);\n \tforeach my $d (keys %$dirent) {\n \t\tif ($dirent->{$d}->kind == $SVN::Node::dir) {\n@@ -3260,8 +3254,9 @@ sub libsvn_skip_unknown_revs {\n \t# Wonderfully consistent library, eh?\n \t# 160013 - svn:// and file://\n \t# 175002 - http(s)://\n+\t# 175007 - http(s):// (this repo required authorization, too...)\n \t#   More codes may be discovered later...\n-\tif ($errno == 175002 || $errno == 160013) {\n+\tif ($errno == 175007 || $errno == 175002 || $errno == 160013) {\n \t\treturn;\n \t}\n \tcroak \"Error from SVN, ($errno): \", $err->expanded_message,\"\\n\";\n@@ -3349,8 +3344,7 @@ sub split_path {\n }\n \n sub repo_path {\n-\t(defined $_[1] && length $_[1]) ? \"$_[0]->{svn_path}/$_[1]\"\n-\t\t\t\t\t: $_[0]->{svn_path}\n+\t(defined $_[1] && length $_[1]) ? $_[1] : ''\n }\n \n sub url_path {\n@@ -3382,10 +3376,9 @@ sub rmdirs {\n \t\texec qw/git-ls-tree --name-only -r -z/, $self->{c} or croak $!;\n \t}\n \tlocal $/ = \"\\0\";\n-\tmy @svn_path = split m#/#, $self->{svn_path};\n \twhile (<$fh>) {\n \t\tchomp;\n-\t\tmy @dn = (@svn_path, (split m#/#, $_));\n+\t\tmy @dn = split m#/#, $_;\n \t\twhile (pop @dn) {\n \t\t\tdelete $rm->{join '/', @dn};\n \t\t}\n-- \n1.4.4.1.g22a08\n"},{"id":"293828","messageId":"11644367004098-git-send-email-normalperson@yhbt.net","threadId":"43087","inReplyTo":"11644366982320-git-send-email-normalperson@yhbt.net","subject":"[PATCH] git-svn: exit with status 1 for test failures","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2006-11-25T06:38:18Z","receivedAt":"2006-11-25T06:38:18Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Some versions of the SVN libraries cause die() to exit with 255,\nand 40cf043389ef4cdf3e56e7c4268d6f302e387fa0 tightened up\ntest_expect_failure to reject return values >128.\n\nSigned-off-by: Eric Wong <normalperson@yhbt.net>\n---\n git-svn.perl |   20 ++++++++++++--------\n 1 files changed, 12 insertions(+), 8 deletions(-)\n\ndiff --git a/git-svn.perl b/git-svn.perl\nindex 5d67771..0a47b1f 100755\n--- a/git-svn.perl\n+++ b/git-svn.perl\n@@ -21,6 +21,7 @@ $ENV{TZ} = 'UTC';\n $ENV{LC_ALL} = 'C';\n $| = 1; # unbuffer STDOUT\n \n+sub fatal (@) { print STDERR $@; exit 1 }\n # If SVN:: library support is added, please make the dependencies\n # optional and preserve the capability to use the command-line client.\n # use eval { require SVN::... } to make it lazy load\n@@ -569,7 +570,7 @@ sub commit_lib {\n \t\t\t\t$no = 1;\n \t\t\t}\n \t\t}\n-\t\tclose $fh or croak $?;\n+\t\tclose $fh or exit 1;\n \t\tif (! defined $r_new && ! defined $cmt_new) {\n \t\t\tunless ($no) {\n \t\t\t\tdie \"Failed to parse revision information\\n\";\n@@ -868,13 +869,16 @@ sub commit_diff {\n \t\t\t\t\t\tprint \"Committed $_[0]\\n\";\n \t\t\t\t\t}, @lock)\n \t\t\t\t);\n-\tmy $mods = libsvn_checkout_tree($ta, $tb, $ed);\n-\tif (@$mods == 0) {\n-\t\tprint \"No changes\\n$ta == $tb\\n\";\n-\t\t$ed->abort_edit;\n-\t} else {\n-\t\t$ed->close_edit;\n-\t}\n+\teval {\n+\t\tmy $mods = libsvn_checkout_tree($ta, $tb, $ed);\n+\t\tif (@$mods == 0) {\n+\t\t\tprint \"No changes\\n$ta == $tb\\n\";\n+\t\t\t$ed->abort_edit;\n+\t\t} else {\n+\t\t\t$ed->close_edit;\n+\t\t}\n+\t};\n+\tfatal \"$@\\n\" if $@;\n \t$_message = $_file = undef;\n \treturn $rev_committed;\n }\n-- \n1.4.4.1.g22a08\n"},{"id":"295398","messageId":"4571F6E7.4050809@vilain.net","threadId":"43087","inReplyTo":"11644366982320-git-send-email-normalperson@yhbt.net","subject":"Re: [PATCH] git-svn: correctly access repos when only given partial read permissions","fromName":"Sam Vilain","fromEmail":"sam@vilain.net","sentAt":"2006-12-02T21:57:59Z","receivedAt":"2006-12-02T21:57:59Z","isPatch":true,"sender":{"key":"sam@vilain.net","avatar":"https://gravatar.com/avatar/8fc840ca854dbf6f7065b4335e3b934951c1dca3b11db688e95e471901f8f4a8?d=mp&s=160"},"body":"Eric Wong wrote:\n> Sometimes users are given only read access to a subtree inside a\n> repository, and git-svn could not read log information (and thus\n> fetch commits) when connecting a session to the root of the\n> repository.  We now start an SVN::Ra session with the full URL\n> of what we're tracking, and not the repository root as before.\n> \n> This change was made much easier with a cleanup of\n> repo_path_split() usage as well as improving the accounting of\n> authentication batons.\n\nThis broke mirroring file:/// URIs;\n\neg, if I have ~/.svk/local as a SVN repository, which has a complete\nmirror of a URL under mirror/fai, and I want to copy the revisions into\ngit using git-svn, I use:\n\nperl ~/src/git/git-svn multi-init -t tags -T trunk \\\n     file:///home/samv/.svk/local/mirror/fai\n\nI now get this error:\n\nFilesystem has no item: File not found: revision 8514, path\n'/mirror/fai/tags/mirror/fai/tags' at /home/samv/src/git/git-svn line 3236\n\n(next, I'll make git-svn correctly look at the svm:* revprops to get the\nupstream repo URL and revision number for the commit message)\n\n"},{"id":"294430","messageId":"20061202222433.GA21171@localdomain","threadId":"43087","inReplyTo":"4571F6E7.4050809@vilain.net","subject":"Re: [PATCH] git-svn: correctly access repos when only given partial read permissions","fromName":"Eric Wong","fromEmail":"normalperson@yhbt.net","sentAt":"2006-12-02T22:24:33Z","receivedAt":"2006-12-02T22:24:33Z","isPatch":true,"sender":{"key":"e@80x24.org","avatar":null},"body":"Sam Vilain <sam@vilain.net> wrote:\n> Eric Wong wrote:\n> > Sometimes users are given only read access to a subtree inside a\n> > repository, and git-svn could not read log information (and thus\n> > fetch commits) when connecting a session to the root of the\n> > repository.  We now start an SVN::Ra session with the full URL\n> > of what we're tracking, and not the repository root as before.\n> > \n> > This change was made much easier with a cleanup of\n> > repo_path_split() usage as well as improving the accounting of\n> > authentication batons.\n> \n> This broke mirroring file:/// URIs;\n> \n> eg, if I have ~/.svk/local as a SVN repository, which has a complete\n> mirror of a URL under mirror/fai, and I want to copy the revisions into\n> git using git-svn, I use:\n> \n> perl ~/src/git/git-svn multi-init -t tags -T trunk \\\n>      file:///home/samv/.svk/local/mirror/fai\n> \n> I now get this error:\n> \n> Filesystem has no item: File not found: revision 8514, path\n> '/mirror/fai/tags/mirror/fai/tags' at /home/samv/src/git/git-svn line 3236\n\nThis should be fixed in 1ca7558dd838e82f6f6b8611b981654fa4ecde2b in\nJunio's master: \"git-svn: fix multi-init\".\n\n> (next, I'll make git-svn correctly look at the svm:* revprops to get the\n> upstream repo URL and revision number for the commit message)\n\nCool.  While you're at it, would you mind looking into supporting some\nof the merge revprops that I've heard about, too?  Thanks.\n\n-- \n"},{"id":"296050","messageId":"457200CA.7010805@vilain.net","threadId":"43087","inReplyTo":"20061202222433.GA21171@localdomain","subject":"Re: [PATCH] git-svn: correctly access repos when only given partial read permissions","fromName":"Sam Vilain","fromEmail":"sam@vilain.net","sentAt":"2006-12-02T22:40:10Z","receivedAt":"2006-12-02T22:40:10Z","isPatch":true,"sender":{"key":"sam@vilain.net","avatar":"https://gravatar.com/avatar/8fc840ca854dbf6f7065b4335e3b934951c1dca3b11db688e95e471901f8f4a8?d=mp&s=160"},"body":"Eric Wong wrote:\n>> I now get this error:\n>>\n>> Filesystem has no item: File not found: revision 8514, path\n>> '/mirror/fai/tags/mirror/fai/tags' at /home/samv/src/git/git-svn line 3236\n> \n> This should be fixed in 1ca7558dd838e82f6f6b8611b981654fa4ecde2b in\n> Junio's master: \"git-svn: fix multi-init\".\n\nAh, so it did.  Silly me for running on ancient version of git-svn ;)\n\n>> (next, I'll make git-svn correctly look at the svm:* revprops to get the\n>> upstream repo URL and revision number for the commit message)\n> \n> Cool.  While you're at it, would you mind looking into supporting some\n> of the merge revprops that I've heard about, too?  Thanks.\n\nGreat idea, I'll certainly do that.  Of course, they are relative to the\n*local* repository...\n\n"}]}