summaryrefslogtreecommitdiff
path: root/git-svn.perl
AgeCommit message (Collapse)AuthorFilesLines
2008-08-03git-svn: Abort with an error if 'fetch' parameter is invalid.Libravatar Avery Pennarun1-2/+6
Previously, if a config entry looked like this: svn-remote.svn.fetch=:refs/heads/whatever git-svn would silently do nothing if you asked it to "git svn fetch", and give a strange error if asked to "git svn dcommit". What it really wants is a line that looks like this: svn-remote.svn.fetch=:refs/remotes/whatever So we should simply abort if we get the wrong thing. On the other hand, there's actually no good reason for git-svn to enforce using the refs/remotes namespace, but the code seems to have hardcoded this in several places and I'm not brave enough to try to fix it all right now. Signed-off-by: Avery Pennarun <apenwarr@gmail.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-25git-svn: teach dcommit about svn auto-propsLibravatar Brad King1-0/+53
Subversion repositories often require files to have properties such as svn:mime-type and svn:eol-style set when they are added. Users typically set these properties automatically using the SVN auto-props feature with 'svn add'. This commit teaches dcommit to look at the user SVN configuration and apply matching auto-props entries for files added by a diff as it is applied to the SVN remote. Signed-off-by: Brad King <brad.king@kitware.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-20git-svn: fix git svn info to work without argumentsLibravatar Dmitry Potapov1-1/+1
commit 2fe403e7452bd6e1e8232445cf5434ce8f1af973 broke "git-svn info ." due to replacing '.' with '' in canonicalize_path for the top directory, while find_file_type_and_diff_status was not corrected. Bug reports: http://thread.gmane.org/gmane.comp.version-control.git/87822/ http://bugs.debian.org/490400 Signed-off-by: Dmitry Potapov <dpotapov@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-16Merge branch 'sb/dashless'Libravatar Junio C Hamano1-1/+1
* sb/dashless: Make usage strings dash-less t/: Use "test_must_fail git" instead of "! git" t/test-lib.sh: exit with small negagive int is ok with test_must_fail Conflicts: builtin-blame.c builtin-mailinfo.c builtin-mailsplit.c builtin-shortlog.c git-am.sh t/t4150-am.sh t/t4200-rerere.sh
2008-07-14git-svn: typofixLibravatar Frederik Schwarzer1-1/+1
Signed-off-by: Frederik Schwarzer <schwarzerf@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-14git-svn: find-rev and rebase for SVN::Mirror repositoriesLibravatar João Abecasis1-4/+35
find-rev and rebase error out on svm because git-svn doesn't trace the original svn revision numbers back to git commits. The updated test case, included in the patch, shows the issue and passes with the rest of the patch applied. This fixes Git::SVN::find_by_url to find branches based on the svm:source URL, where useSvmProps is set. Also makes sure cmd_find_rev and working_head_info use the information they have to correctly track the source repository. This is enough to get find-rev and rebase working. Signed-off-by: João Abecasis <joao@abecasis.name> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-13Make usage strings dash-lessLibravatar Stephan Beyer1-1/+1
When you misuse a git command, you are shown the usage string. But this is currently shown in the dashed form. So if you just copy what you see, it will not work, when the dashed form is no longer supported. This patch makes git commands show the dash-less version. For shell scripts that do not specify OPTIONS_SPEC, git-sh-setup.sh generates a dash-less usage string now. Signed-off-by: Stephan Beyer <s-beyer@gmx.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-07-07git-svn.perl: workaround assertions in svn library 1.5.0Libravatar Gerrit Pape1-0/+2
With subversion 1.5.0 (C and perl libraries) the git-svn selftest t9101-git-svn-props.sh fails at test 25 and 26. The following commands cause assertions in the svn library $ cd deeply $ git-svn propget svn:ignore . perl: /build/buildd/subversion-1.5.0dfsg1/subversion/libsvn_ra/ra_loader.c:674: svn_ra_get_dir: Assertion `*path != '/'' failed. Aborted $ git-svn propget svn:ignore .. perl: /build/buildd/subversion-1.5.0dfsg1/subversion/libsvn_subr/path.c:120: svn_path_join: Assertion `is_canonical(component, clen)' failed. With this commit, git-svn makes sure the path doesn't start with a slash, and is not a dot, working around these assertions. The breakage was reported by Lucas Nussbaum through http://bugs.debian.org/489108 Signed-off-by: Gerrit Pape <pape@smarden.org> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-28git-svn: don't sanitize remote names in configLibravatar Eric Wong1-12/+3
The original sanitization code was just taken from the remotes2config.sh shell script in contrib. Credit to Avery Pennarun for noticing this mistake, and Junio for clarifying the rules for config section names: Junio C Hamano wrote in <7vfxr23s6m.fsf@gitster.siamese.dyndns.org>: > In > > [foo "bar"] baz = value > > foo and baz must be config.c::iskeychar() (and baz must be isalpha()), but > "bar" can be almost anything. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-28git-svn: avoid filling up the disk with temp files.Libravatar Avery Pennarun1-1/+4
Commit ffe256f9bac8a40ff751a9341a5869d98f72c285 ("git-svn: Speed up fetch") introduced changes that create a temporary file for each object fetched by svn. These files should be deleted automatically, but perl apparently doesn't do this until the process exits (or perhaps when its garbage collector runs). This means that on a large fetch, especially with lots of branches, we sometimes fill up /tmp completely, which prevents the next temp file from being written completely. This is aggravated by the fact that a new temp file is created for each updated file, even if that update produces a file identical to one already in git. Thus, it can happen even if there's lots of disk space to store the finished repository. We weren't adequately checking for write errors, so this would result in an invalid file getting committed, which caused git-svn to fail later with an invalid checksum. This patch adds a check to syswrite() so similar problems don't lead to corruption in the future. It also unlink()'s each temp file explicitly when we're done with it, so the disk doesn't need to fill up. Signed-off-by: Avery Pennarun <apenwarr@gmail.com> Tested-by: Björn Steinbrink <B.Steinbrink@gmx.de> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-23git-svn: make rebuild respect rewriteRoot optionLibravatar Jan Krüger1-3/+3
Suppose someone fetches git-svn-ified commits from another repo and then attempts to use 'git-svn init --rewrite-root=foo bar'. Using git svn rebase after that will fail badly: * For each commit tried by working_head_info, rebuild is called indirectly. * rebuild will iterate over all commits and skip all of them because the URL does not match. Because of that no rev_map file is generated at all. * Thus, rebuild will run once for every commit. This takes ages. * In the end there still isn't any rev_map file and thus working_head_info fails. Addressing this behaviour fixes an apparently not too uncommon problem with providing git-svn mirrors of Subversion repositories. Some repositories are accessed using different URLs depending on whether the user has push privileges or not. In the latter case, an anonymous URL is often used that differs from the push URL. Providing a mirror that is usable in both cases becomes a lot more possible with this change. Signed-off-by: Jan Krüger <jk@jk.gs> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-14git-svn: don't append extra newlines at the end of commit messages.Libravatar Avery Pennarun1-3/+5
In git, all commits end in exactly one newline character. In svn, commits end in zero or more newlines. Thus, when importing commits from svn into git, git-svn always appends two extra newlines to ensure that the git-svn-id: line is separated from the main commit message by at least one blank line. Combined with the terminating newline that's always present in svn commits produced by git, you usually end up with two blank lines instead of one between the commit message and git-svn-id: line, which is undesirable. Instead, let's remove all trailing whitespace from the git commit on the way through to svn. Signed-off-by: Avery Pennarun <apenwarr@gmail.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-01git-svn fails in prop_walk if $self->{path} is not emptyLibravatar Christian Engwer1-1/+1
If url://repo/trunk is the current Git branch, prop_walk strips trunk from the path name. That is useful as, for example "git svn show-ignore" should not return results like trunk/foo but foo if svn:ignore for trunk includes foo. The problem now is that prop_walk strips trunk from the path and then calls itself recursively. But now trunk is missing in the path and get_dir fails, because it is called for a non existing path. The attached patch fixed the problem, by adding the previously stipped $self->{path} in the recursive call. I tested it with my current git-svn repository for the commands show-ignore and show-external. Patch was submitted through http://bugs.debian.org/477393 Signed-off-by: Gerrit Pape <pape@smarden.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-01Add a --dry-run option to git-svn rebaseLibravatar Seth Falcon1-0/+6
When working with multiple branches in an svn repository, it can be useful to verify the svn repository and local tracking branch that will be used for the rebase operation. Signed-off-by: Seth Falcon <seth@userprimary.net> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-06-01Fix path duplication in git svn commit-diffLibravatar Karl Hasselström1-2/+1
Given an SVN repo file:///tmp/svntest/repo, trying to commit changes to a file proj/trunk/foo.txt in that repo with this command line git svn commit-diff -r2 HEAD^ HEAD file:///tmp/svntest/repo/proj/trunk gave the error message Filesystem has no item: File not found: transaction '2-6', path '/proj/trunk/proj/trunk/foo.txt' This fixes the duplication. Signed-off-by: Karl Hasselström <kha@treskal.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-27Git::cat_blob: allow using an empty blob to fix git-svn breakageLibravatar Junio C Hamano1-2/+2
Recent "git-svn optimization" series introduced Git::cat_blob() subroutine whose interface was broken in that it returned the size of the blob but signalled an error by returning 0. You can never use an empty blob with such an interface. This fixes the interface to return a negative value to signal an error. Reported by Björn Steinbrink. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-25Merge branch 'ar/batch-cat'Libravatar Junio C Hamano1-22/+20
* ar/batch-cat: change quoting in test t1006-cat-file.sh builtin-cat-file.c: use parse_options() git-svn: Speed up fetch Git.pm: Add hash_and_insert_object and cat_blob Git.pm: Add command_bidi_pipe and command_close_bidi_pipe git-hash-object: Add --stdin-paths option Add more tests for git hash-object Move git-hash-object tests from t5303 to t1007 git-cat-file: Add --batch option git-cat-file: Add --batch-check option git-cat-file: Make option parsing a little more flexible git-cat-file: Small refactor of cmd_cat_file Add tests for git cat-file
2008-05-25Merge branch 'ap/svn'Libravatar Junio C Hamano1-1/+13
* ap/svn: git-svn: add test for --add-author-from and --use-log-author git-svn: add documentation for --add-author-from option. git-svn: Add --add-author-from option. git-svn: add documentation for --use-log-author option.
2008-05-23git-svn: Speed up fetchLibravatar Adam Roben1-22/+20
We were spending a lot of time forking/execing git-cat-file and git-hash-object. We now maintain a global Git repository object in order to use Git.pm's more efficient hash_and_insert_object and cat_blob methods. Signed-off-by: Adam Roben <aroben@apple.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-11Add svn-compatible "blame" output format to git-svnLibravatar Steven Grimm1-11/+44
git-svn blame produced output in the format of git blame; in environments where there are scripts that read the output of svn blame, it's useful to be able to use them with the output of git-svn. The git-compatible format is still available using the new "--git-format" option. This also fixes a bug in the initial git-svn blame implementation; it was bombing out on uncommitted local changes. Signed-off-by: Steven Grimm <koreth@midwinter.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-11git-svn: fix cloning of HTTP URLs with '+' in their pathLibravatar Eric Wong1-1/+1
With this, git svn clone -s http://svn.gnome.org/svn/gtk+ is successful. Also modified the funky rename test for this, which _does_ include escaped '+' signs for HTTP URLs. SVN seems to accept either "+" or "%2B" in filenames and directories (just not the main URL), so I'll leave it alone for now. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-05git-svn: Make create-ignore use git add -fLibravatar Gustaf Hendeby1-1/+1
When having a svn:ignore that ignores the .gitignore file the -f option to git add must be used to avoid git complaining about adding an ignored file and hence stop the process of creating .gitignores. Signed-off-by: Gustaf Hendeby <hendeby@isy.liu.se> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-05-04git-svn: Add --add-author-from option.Libravatar Avery Pennarun1-1/+13
This option adds a From: line (based on the commit's author information) at the beginning of the body of the commit log message when sending to svn, if a From: or Signed-off-by: header does not exist. This, combined with --use-log-author, can retain the author field of commits through a round trip from git to svn and back. Signed-off-by: Avery Pennarun <apenwarr@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-30git-svn: Same default as cvsimport when using --use-log-authorLibravatar Stephen R. van den Berg1-2/+4
When using git-cvsimport, the author is inferred from the cvs commit, e.g. cvs commit logname is foobaruser, then the author field in git results in: Author: foobaruser <foobaruser> Which is not perfect, but perfectly acceptable given the circumstances. The default git-svn import however, results in: Author: foobaruser <foobaruser@acf43c95-373e-0410-b603-e72c3f656dc1> When using mixes of imports, from CVS and SVN into the same git repository, you'd like to harmonise the imports to the format cvsimport uses. git-svn supports an experimental option --use-log-author which currently results in the same logentry as without that option when no From: or Signed-off-by: is found in the logentry ($email currently ends up empty, and hence is generated again). This patches harmonises the result with cvsimport, and makes git-svn --use-log-author produce: Author: foobaruser <foobaruser> Signed-off-by: Stephen R. van den Berg <srb@cuci.nl> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-29git-svn: detect and fail gracefully when dcommitting to a voidLibravatar Matthieu Moy1-2/+4
The command git svn clone (URL of an empty SVN repo here) works, creates an empty git repository. I can perform the initial commit there, but then, "git svn dcommit" says : Use of uninitialized value in concatenation (.) or string at .../git-svn line 414. Committing to ... Unable to determine upstream SVN information from HEAD history I guess a correct management of the initial commit in git-svn would be hard to implement, but at least, the error message can be improved. First step is something like the patch below, and better would be for "git svn clone" to warn that it won't be able to do much with the cloned repo. Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-22Merge branch 'maint-1.5.4' into maintLibravatar Junio C Hamano1-2/+5
* maint-1.5.4: svn-git: Use binmode for reading/writing binary rev maps diff options documentation: refer to --diff-filter in --name-status git-svn bug with blank commits and author file archive.c: format_subst - fixed bogus argument to memchr copy.c: copy_fd - correctly report write errors gitattributes: Fix subdirectory attributes specified from root directory
2008-04-22svn-git: Use binmode for reading/writing binary rev mapsLibravatar Michael Weber1-0/+4
Otherwise, there is a possible interaction with UTF-8 locales in combination with PERL_UNICODE, resulting in "inconsistent size: 40" or "read:"-type errors. See also: perldoc -f binmode <http://perldoc.perl.org/perl581delta.html#UTF-8-no-longer-default-under-UTF-8-locales> Signed-off-by: Michael Weber <michaelw@foldr.org> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-22git-svn bug with blank commits and author fileLibravatar Thomas Guyot-Sionnest1-2/+1
When trying to import from svn using an author file, git-svn bails out if it encounters a blank author. The attached patch changes this behavior and allow using the author file with blanks authors. I came across this bug while importing from a cvs2svn repo where the initial revision (1) has a blank author. This doesn't break the behavior of bailing out when an unknown author is encountered. Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-11Force the medium pretty format on calls to git logLibravatar Pedro Melo1-1/+1
If a user has customized format.pretty in config, git-svn rebase fails with: Unable to determine upstream SVN information from working tree history because the command expects to read the commit log in the default format. This fixes the command to explicitly ask for the format it wants to read from. Signed-off-by: Pedro Melo <melo@simplicidade.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-04-07git-svn: fix following renamed paths when tracking a single pathLibravatar Eric Wong1-2/+3
When using git-svn to follow only a single (empty) path per svn-remote (i.e. not using --stdlayout), following the history of a renamed path was broken in c586879cdfa4f8181a14e953a9152a4639eef333. This reverts the regression for the single (emtpy) path per svn-remote case. To avoid breaking the tests in a committed revision, this is an addendum to a patch originally submitted by Santhosh Kumar Mani <santhoshmani@gmail.com>: > git-svn: add test for renamed directory fetch > > This test tries to fetch a directory which had renames in the > history from a SVN repository. [ew: unneccesary dependency on the starting an HTTP server removed from Santhosh's original test.] Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-03-30git-svn: remove redundant slashes from show-ignoreLibravatar Eric Wong1-1/+1
Jonathan Scott Duff wrote: > Recently I tried "git svn showignore" on my parrot repository and it > failed. I tracked it down to the prop_walk() sub. When it recurses, > $path has an extra / on the beginning (i.e., when it recurses, it > tries to get the props for "//apps" instead of "/apps"). I *think* > this is because $path is used in the recursive call rather than $p > (which seems to contain a properly transformed $path). Anyway, I've > attached a patch that works for me and I think is generally the right > thing. Patch-submitted-by: Jonathan Scott Duff Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-03-20Don't try and percent-escape existing percent escapes in git-svn URIsLibravatar Kevin Ballard1-1/+1
git-svn project names are percent-escaped ever since f5530b8 (git-svn: support for funky branch and project names over HTTP(S), 2007-11-11). Unfortunately this breaks the scenario where the user hands git-svn an already-escaped URI. Fix the regexp to skip over what looks like existing percent escapes, and test this scenario. Signed-off-by: Kevin Ballard <kevin@sb.org> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-03-15Merge branch 'maint'Libravatar Junio C Hamano1-1/+2
* maint: Make man page building quiet when DOCBOOK_XSL_172 is defined git-new-workdir: Share SVN meta data between work dirs and the repository rev-parse: fix meaning of rev~ vs rev~0. git-svn: don't blindly append '*' to branch/tags config
2008-03-14git-svn: don't blindly append '*' to branch/tags configLibravatar Eric Wong1-1/+2
Previously, git-svn would blindly append '*' even if it was specified by the user during initialization (for certain SVN setups, it is necessary). Now, the following command will work correctly: git svn init -T trunk/docutils \ -t 'tags/*/docutils' \ -b 'branches/*/docutils' \ svn://svn.berlios.de/docutils Thanks to martin f krafft for the bug report: > My git-svn target configuration is > > [svn-remote "svn"] > url = svn://svn.berlios.de/docutils > fetch = trunk/docutils:refs/remotes/trunk > branches = branches/*/docutils:refs/remotes/* > tags = tags/*/docutils:refs/remotes/tags/* > > Unfortunately, when I run > > git-svn init -T trunk/docutils -t 'tags/*/docutils' > -b 'branches/*/docutils' > > then I get (note the two asterisks on the left hand side): > > branches = branches/*/docutils/*:refs/remotes/* > tags = tags/*/docutils/*:refs/remotes/tags/* > > I took a brief stab at the code but I can't even figure out where > the /* is appended, so I defer to you. > > It should be trivial to keep git-svn from appending /* if the left > side already contains an asterisk. Signed-off-by: Eric Wong <normalperson@yhbt.net> Tested-by: martin f krafft <madduck@madduck.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-03-11Merge branch 'maint'Libravatar Junio C Hamano1-1/+2
* maint: git-svn: fix find-rev error message when missing arg t0021: tr portability fix for Solaris launch_editor(): allow spaces in the filename git rebase --abort: always restore the right commit
2008-03-11git-svn: fix find-rev error message when missing argLibravatar Marc-Andre Lureau1-1/+2
Just let the user know that a revision argument is missing instead of a perl error. This error message mimic the "init" error message, but could be improved. Signed-off-by: Marc-Andre Lureau <marcandre.lureau@gmail.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-03-08Merge branch 'maint' to sync with 1.5.4.4Libravatar Junio C Hamano1-1/+6
* maint: GIT 1.5.4.4 ident.c: reword error message when the user name cannot be determined Fix dcommit, rebase when rewriteRoot is in use Really make the LF after reset in fast-import optional
2008-03-08Fix dcommit, rebase when rewriteRoot is in useLibravatar John Goerzen1-1/+6
When the rewriteRoot setting is used with git-svn, it causes the svn IDs added to commit messages to bear a different URL than is actually used to retrieve Subversion data. It is common for Subversion repositories to be available multiple ways: for instance, HTTP to the public, and svn+ssh to people with commit access. The need to switch URLs for access is fairly common as well -- perhaps someone was just given commit access. To switch URLs without having to rewrite history, one can use the old url as a rewriteRoot, and use the new one in the svn-remote url setting. This works well for svn fetching and general git commands. However, git-svn dcommit, rebase, and perhaps other commands do not work in this scenario. They scan the svn ID lines in commit messages and attempt to match them up with url lines in [svn-remote] sections in the git config. This patch allows them to match rewriteRoot options, if such options are present. Signed-off-by: John Goerzen <jgoerzen@complete.org> Acked-by: Eric Wong <normalperson@yhbt.net>
2008-02-27git-svn: Don't prompt for client cert password everytime.Libravatar Sebastian Noack1-0/+1
Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-02-27git-svn: Don't prompt for client cert password everytime.Libravatar Sebastian Noack1-0/+1
Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-02-11Add `git svn blame' commandLibravatar Tim Stoakes1-0/+21
This command is identical to `git blame', but it shows SVN revision numbers instead of git commit hashes. [ew: support "^initial commit" and minor formatting fixes] Signed-off-by: Tim Stoakes <tim@stoakes.net> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-02-06git-svn: improve repository URL matching when following parentsLibravatar Eric Wong1-1/+6
This way we can avoid the spawning of a new SVN::Ra session by reusing the existing one. The most problematic issue is that some svn servers disallow too many connections from a single IP, so this will allow git-svn to fetch from those repositories with a higher success rate by using fewer connections. This sometimes showed up as a new (and redundant) [svn-remote "$parent_refname"] entry in $GIT_DIR/svn/.metadata. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-02-03Let "git svn" run "git gc --auto" occasionallyLibravatar Karl Hasselström1-0/+12
Let "git svn" run "git gc --auto" every 1000 imported commits to reduce the number of loose objects. To handle the common use case of frequent imports, where each invocation typically fetches much less than 1000 commits, also run gc unconditionally at the end of the import. "1000" is the same number that was used by default when we called git-repack. It isn't necessarily still the best choice. Signed-off-by: Karl Hasselström <kha@treskal.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-02-03git-svn: Don't call git-repack anymoreLibravatar Karl Hasselström1-11/+3
In a moment, we'll start calling git-gc --auto instead, since it is a better fit to what we're trying to accomplish. The command line options are still accepted, but don't have any effect, and we warn the user about that. Signed-off-by: Karl Hasselström <kha@treskal.com> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-22git-svn: default to repacking every 1000 commitsLibravatar Eric Wong1-6/+4
This should reduce disk space usage when doing large imports. We'll be switching to "gc --auto" post-1.5.4 to handle repacking for us. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-12git-svn: handle leading/trailing whitespace from svnsync revpropsLibravatar Eric Wong1-6/+12
Repositories generated by svnsync cannot be relied on to have properly set revprops without newlines in UUIDs and URLs. There may be broken versions of svnsync out there that append extra newlines to UUIDs, or the revprops could've been changed by repository administrators at any time, too. At least one repository we've come across has an embedded newline erroneously set in the svnsync-uuid prop. This is bad because the trailing newline is taken as another record by the Git.pm library, and the wantarray detection causes tmp_config() to return an array with an empty-but-existing second element. We will now strip leading and trailing whitespace both before setting and after reading the uuid and url for svnsync values. We will also force tmp_config to return a single scalar when reading existing values. SVN UUIDs should never have whitespace in them, and SVN repository URLs should be URI-escaped, so neither of those values we ever see in git-svn should actually have whitespace in them. Thanks to Dennis Schridde for the bug report and Junio for helping diagnose this. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-09Trim leading / off of paths in git-svn prop_walkLibravatar Kevin Ballard1-0/+1
prop_walk adds a leading / to all subdirectory paths. Unfortunately this causes a problem when the remote repo lives in a subdirectory itself, as the leading / causes subsequent PROPFIND calls to be executed on the wrong path. Trimming the / before calling the PROPFIND fixes this problem. Signed-off-by: Kevin Ballard <kevin@sb.org> Acked-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-08Merge in GIT 1.5.3.8Libravatar Junio C Hamano1-0/+4
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-07git-svn: clarify the "Ignoring error from SVN" pieceLibravatar Eric Wong1-0/+4
I've heard of several users puzzled by this, and it sometimes it appears as if git-svn is doing nothing on slower connections and larger repositories. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-07git-svn: support for funky branch and project names over HTTP(S)Libravatar Eric Wong1-2/+22
SVN requires that paths be URI-escaped for HTTP(S) repositories. file:// and svn:// repositories do not need these rules. Additionally, accessing individual paths inside repositories (check_path() and get_log() do NOT require escapes to function and in fact it breaks things). Noticed-by: Michael J. Cohen <mjc@cruiseplanners.com> Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>