summaryrefslogtreecommitdiff
path: root/contrib/git-svn
AgeCommit message (Collapse)Author
2006-04-04contrib/git-svn: handle array values correctlyEric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-04contrib/git-svn: make sure our git-svn is up-to-date for testEric Wong
Bugs like the last one could've been avoided if it weren't for this... Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-04contrib/git-svn: ensure repo-config returns a value before using itEric Wong
fetching from repos without an authors-file defined was broken. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-02contrib/git-svn: documentation updatesEric Wong
contrib/git-svn/git-svn.txt: added git-repo-config key names for options fixed quoting of "git-svn-HEAD" in the manpage use preformatted text for examples contrib/git-svn/Makefile: add target to generate HTML: http://git-svn.yhbt.net/git-svn.html Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-02contrib/git-svn: accept configuration via repo-configEric Wong
repo-config keys are any of the long option names minus the '-' characters Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-30contrib/git-svn: force GIT_DIR to an absolute pathEric Wong
We chdir internally, so we need a consistent GIT_DIR variable. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-26contrib/git-svn: stabilize memory usage for big fetchesEric Wong
We should be safely able to import histories with thousands of revisions without hogging up lots of memory. With this, we lose the ability to autocorrect mistakes when people specify revisions in reverse, but it's probably no longer a problem since we only have one method of log parsing nowadays. I've added an extra check to ensure that revision numbers do increment. Also, increment the version number to 0.11.0. I really should just call it 1.0 soon... Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-21contrib/git-svn: allow rebuild to work on non-linear remote headsEric Wong
Because committing back to an SVN repository from different machines can result in different lineages, two different repositories running git-svn can result in different commit SHA1s (but of the same tree). Sometimes trees that are tracked independently are merged together (usually via children), resulting in non-unique git-svn-id: lines in rev-list. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-09contrib/git-svn: fix a harmless warning on rebuild (with old repos)Eric Wong
It's only for repositories that were imported with very early versions of git-svn. Unfortunately, some of those repos are out in the wild already, so fix this warning. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-09contrib/git-svn: remove the --no-stop-on-copy flagEric Wong
Output a big warning if somebody actually has a pre-1.0 version of svn that doesn't support it. Thanks to Yann Dirson for reminding me it still existed and attempting to re-enable it :) I think I subconciously removed support for it earlier... Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-09contrib/git-svn: fix svn compat and fetch argsEric Wong
'svn info' doesn't work with URLs in svn <= 1.1. Now we only run svn info in local directories. As a side effect, this should also work better for 'init' off directories that are no longer in the latest revision of the repository. svn checkout -r<revision> arguments are fixed. Newer versions of svn (1.2.x) seem to need URL@REV as well as -rREV to checkout a particular revision... Add an example in the manpage of how to track directory that has been moved since its initial revision. A huge thanks to Yann Dirson for the bug reporting and testing my original patch. Thanks also to Junio C Hamano for suggesting a safer way to use git-rev-parse. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: fix a copied-tree bug in an overzealous assertionEric Wong
I thought passing --stop-on-copy to svn would save us from all the trouble svn-arch-mirror had with directory (project) copies. I was wrong, there was one thing I overlooked. If a tree was moved from /foo/trunk to /bar/foo/trunk with no other changes in r10, but the last change was done in r5, the Last Changed Rev (from svn info) in /bar/foo/trunk will still be r5, even though the copy in the repository didn't exist until r10. Now, if we ever detect that the Last Changed Rev isn't what we're expecting, we'll run svn diff and only croak if there are differences between them. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: better documenting of CLI switchesEric Wong
Also, fix a asciidoc formatting error Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: add --id/-i=$GIT_SVN_ID command-line switchEric Wong
I ended up using GIT_SVN_ID far more than I ever thought I would. Typing less is good. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: avoid re-reading the repository uuid, it never changesEric Wong
If it does change, we're screwed anyways as SVN will refuse to commit or update. We also never access more than one SVN repository per-invocation, so we can store it as a global, too. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: create a more recent master if one does not existEric Wong
In a new repository, the initial fetch creates a master branch if one does not exist so HEAD has something to point to. It now creates a master at the end of the initial fetch run, pointing to the latest revision. Previously it pointed to the first revision imported, which is generally less useful. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: cleanup option parsingEric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: allow --authors-file to be specifiedEric Wong
Syntax is compatible with git-svnimport and git-cvsimport: normalperson = Eric Wong <normalperson@yhbt.net> If this option is specified and git-svn encounters an SVN committer name that it cannot parse, it git-svn will abort. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: strip 'git-svn-id:' when commiting to SVNEric Wong
We regenerate and use git-svn-id: whenever we fetch or otherwise commit to remotes/git-svn. We don't actually know what revision number we'll commit to SVN at commit time, so this is useless. It won't throw off things like 'rebuild', though, which knows to only use the last instance of git-svn-id: in a log message Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: several small bug fixes and changesEric Wong
* Fixed manually-edited commit messages not going to remotes/git-svn on sequential commits after the sequential commit optimization. * format help correctly after adding 'show-ignore' * sha1_short regexp matches down to 4 hex characters (from git-rev-parse --short documentation) * Print the first line of the commit message when we commit to SVN next to the sha1. * Document 'T' (type change) in the comments Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-03contrib/git-svn: add -b/--branch switch for branch detectionEric Wong
I've said I don't like branches in Subversion, and I still don't. This is a bit more flexible, though, as the argument for -b is any arbitrary git head/tag reference. This makes some things easier: * Importing git history into a brand new SVN branch. * Tracking multiple SVN branches via GIT_SVN_ID, even from multiple repositories. * Adding tags from SVN (still need to use GIT_SVN_ID, though). * Even merge tracking is supported, if and only the heads end up with 100% equivalent tree objects. This is more stricter but more robust and foolproof than parsing commit messages, imho. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-02contrib/git-svn: use refs/remotes/git-svn instead of git-svn-HEADEric Wong
After reading a lengthy discussion on the list, I've come to the conclusion that creating a 'remotes' directory in refs isn't such a bad idea. You can still branch from it by specifying remotes/git-svn (not needing the leading 'refs/'), and the documentation has been updated to reflect that. The 'git-svn' part of the ref can of course be set to whatever you want by using the GIT_SVN_ID environment variable, as before. I'm using refs/remotes/git-svn, and not going with something like refs/remotes/git-svn/HEAD as it's redundant for Subversion where there's zero distinction between branches and directories. Run git-svn rebuild --upgrade to upgrade your repository to use the new head. git-svn-HEAD must be manually deleted for safety reasons. Side note: if you ever (and I hope you never) want to run git-update-refs on a 'remotes/' ref, make sure you have the 'refs/' prefix as you don't want to be clobbering your 'remotes/' in $GIT_DIR (where remote URLs are stored). Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-27contrib/git-svn: correct commit example in manpageEric Wong
Thanks to Nicolas Vilz <niv@iaglans.de> for noticing this. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-27contrib/git-svn: tell the user to not modify git-svn-HEAD directlyEric Wong
As a rule, interface branches to different SCMs should never be modified directly by the user. They are used exclusively for talking to the foreign SCM. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-26contrib/git-svn: version 0.10.0Eric Wong
New features deserve an increment of the minor version. This will very likely become 1.0.0 unless release-critical bugs are found. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-26contrib/git-svn: optimize sequential commits to svnEric Wong
Avoid running 'svn up' to a previous revision if we know the revision we just committed is the first descendant of the revision we came from. This reduces the time to do a series of commits by about 25%. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-26contrib/git-svn: add show-ignore commandEric Wong
Recursively finds and lists the svn:ignore property on directories. The output is suitable for appending to the $GIT_DIR/info/exclude file. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: 0.9.1: add --version and copyright/license (GPL v2+) informationEric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20contrib/git-svn: add Makefile, test, and associated ignoresEric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: fix several corner-case and rare bugs with 'commit'Eric Wong
None of these were really show-stoppers (or even triggered) on most of the trees I've tracked. * Node change prevention for identically named nodes. This is a limitation of SVN, but we find the error and exit before it's passed to SVN so we don't dirty our working tree when our commit fails. git-svn will exit with an error code 1 if any of the following conditions are found: 1. a directory is removed and a file of the same name of the removed directory is created 1a. a file has its parent directory removed and the file is takes the name of the removed parent directory:: baz/zzz => baz 2. a file is removed and a directory of the same name of the removed file is created. 2a. a file is moved into a deeper directory that shares the previous name of the file:: dir/$file => dir/file/$file Since SVN cannot handle these cases, the user will have to manually split the commit into several parts. * --rmdir now handles nested/deep removals. If dir/a/b/c/d/e/file is removed, and everything else is in the dir/ hierarchy is otherwise empty, then dir/ will be deleted when file is deleted from svn and --rmdir specified. * Always assert that we have written the tree we want to write on commits. This helped me find several bugs in the symlink handling code (which as been fixed). * Several symlink handling fixes. We now refuse to set permissions on symlinks. We also always unlink a file if we're going to overwrite it. * Apply changes in a pre-determined order, so we always have rename from locations handy before we delete them. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20contrib/git-svn.txt: add a note about renamed/copied directory supportEric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: change ; to && in addremove()Eric Wong
Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: remove any need for the XML::Simple dependencyEric Wong
XML::Simple was originally required back when I made svn-arch-mirror because I needed to explictly track renames with Arch. Then I carried it over to git-svn because I was afraid somebody could commit an svn log message that could throw off a non-XML log parser. Then I noticed the <n> lines column in the header. So, no more XML :) Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: Allow for more argument types for commit (from..to)Eric Wong
Allow 'from..to' notation from the command line. More liberal sha1 parsing when reading from stdin no longer requires the sha1 to be the first character, so a leading 'commit ' string is OK. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: allow --find-copies-harder and -l<num> to be passed on commitEric Wong
Both of these options are passed directly to git-diff-tree when committing to a SVN repository. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-20git-svn: fix a typo in defining the --no-stop-on-copy optionEric Wong
Just a typo, I doubt anybody would use (and I highly recommend not using) this option anyways. But you never know... Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-18git-svn: remove files from the index before adding/updatingEric Wong
This fixes a bug when importing where a directory gets removed/renamed but is immediately replaced by a file of the same name in the same revision. Signed-off-by: Eric Wong <normalperson@yhbt.net>
2006-02-17git-svn: ensure fetch always works chronologically.Eric Wong
We run svn log against a URL without a working copy for the first fetch, so we end up a log that's sorted from highest to lowest. That's bad, we always want lowest to highest. Just default to --revision 0:HEAD now if -r isn't specified for the first fetch. Also sort the revisions after we get them just in case somebody accidentally reverses the argument to --revision for whatever reason. Thanks again to Emmanuel Guerin for helping me find this. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-17git-svn: fix revision order when XML::Simple is not loadedEric Wong
Thanks to Emmanuel Guerin for finding the bug. Signed-off-by: Eric Wong <normalperson@yhbt.net> Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-16Introducing contrib/git-svn.Eric Wong