path: root/git-svn.perl
AgeCommit message (Collapse)Author
2011-11-01svn: Quote repository root in regex matchTed Percival
Fixes a problem matching repository URLs, especially those with a '+' in the URL, such as svn+ssh:// URLs. Parts of the URL were interpreted as special characters by the regex matching. Signed-off-by: Ted Percival <> Acked-by: Eric Wong <>
2011-10-19Merge branch 'pt/mingw-misc-fixes'Junio C Hamano
* pt/mingw-misc-fixes: t9901: fix line-ending dependency on windows mingw: ensure sockets are initialized before calling gethostname mergetools: use the correct tool for Beyond Compare 3 on Windows t9300: do not run --cat-blob-fd related tests on MinGW git-svn: On MSYS, escape and quote SVN_SSH also if set by the user t9001: do not fail only due to CR/LF issues t1020: disable the pwd test on MinGW
2011-10-16git-svn: Allow certain refs to be ignoredMichael Olson
Implement a new --ignore-refs option which specifies a regex of refs to ignore while importing svn history. This is a useful supplement to the --ignore-paths option, as that option only operates on the contents of branches and tags, not the branches and tags themselves. Signed-off-by: Michael Olson <> Acked-by: Eric Wong <>
2011-10-16git svn dcommit: new option --interactive.Frédéric Heitzmann
Allow the user to check the patch set before it is commited to SVN. It is then possible to accept/discard one patch, accept all, or quit. This interactive mode is similar with 'git send email' behaviour. However, 'git svn dcommit' returns as soon as one patch is discarded. Part of the code was taken from git-send-email.perl (see 'ask' function) Tests several combinations of potential answers to 'git svn dcommit --interactive'. For each of them, test whether patches were commited to SVN or not. Thanks-to Eric Wong <> for the initial idea. Acked-by: Eric Wong <> Signed-off-by: Frédéric Heitzmann <>
2011-10-15git-svn: On MSYS, escape and quote SVN_SSH also if set by the userSebastian Schuberth
While GIT_SSH does not require any escaping / quoting (e.g. for paths containing spaces), SVN_SSH requires it due to its use in a Perl script. Previously, SVN_SSH has only been escaped and quoted automatically if it was unset and thus derived from GIT_SSH. For user convenience, do the escaping and quoting also for a SVN_SSH set by the user. This way, the user is able to use the same unescaped and unquoted syntax for GIT_SSH and SVN_SSH. Signed-off-by: Sebastian Schuberth <> Signed-off-by: Junio C Hamano <>
2011-10-05use -h for synopsis and --help for manpage consistentlyClemens Buchacher
A few scripted Porcelain implementations pretend as if the routine to show their own help messages are triggered upon "git cmd --help", but a command line parser of "git" will hijack such a request and shows the manpage for the cmd subcommand. Leaving the code to handle such input is simply misleading. Signed-off-by: Clemens Buchacher <> Signed-off-by: Junio C Hamano <>
2011-09-13git-svn: teach git-svn to populate svn:mergeinfoBryan Jacobs
Allow git-svn to populate the svn:mergeinfo property automatically in a narrow range of circumstances. Specifically, when dcommitting a revision with multiple parents, all but (potentially) the first of which have been committed to SVN in the same repository as the target of the dcommit. In this case, the merge info is the union of that given by each of the parents, plus all changes introduced to the first parent by the other parents. In all other cases where a revision to be committed has multiple parents, cause "git svn dcommit" to raise an error rather than completing the commit and potentially losing history information in the upstream SVN repository. This behavior is disabled by default, and can be enabled by setting the svn.pushmergeinfo config option. [ew: minor style changes and manpage merge fix] Acked-by: Eric Wong <> Signed-off-by: Bryan Jacobs <>
2011-09-01git-svn: Teach dcommit --mergeinfo to handle multiple linesBryan Jacobs
"svn dcommit --mergeinfo" replaces the svn:mergeinfo property in an upstream SVN repository with the given text. The svn:mergeinfo property may contain commits originating on multiple branches, separated by newlines. Cause space characters in the mergeinfo to be replaced by newlines, allowing a user to create history representing multiple branches being merged into one. Update the corresponding documentation and add a test for the new functionality. Signed-off-by: Bryan Jacobs <> Acked-by: Sam Vilain <> Acked-by: Eric Wong <>
2011-09-01git-svn: fix fetch with moved path when using rewriteRootEric Wong
The matching step in commit 3235b7053c45a734c1cdf9b117bda68b7ced29c9 did not properly account for users of the "rewriteRoot" configuration parameter. ref: <> Suggested-by: H Krishnan <> Signed-off-by: Eric Wong <>
2011-09-01git-svn: New flag to emulate empty directoriesRay Chen
Adds a --preserve-empty-dirs flag to the clone operation that will detect empty directories in the remote Subversion repository and create placeholder files in the corresponding local Git directories. This allows "empty" directories to exist in the history of a Git repository. Also adds the --placeholder-file flag to control the name of any placeholder files created. Default value is ".gitignore". Signed-off-by: Ray Chen <> Acked-by: Eric Wong <>
2011-06-28git-svn: Correctly handle root commits in mergeinfo rangesMichael Haggerty
If the bottom of a mergeinfo range is a commit that maps to a git root commit, then it doesn't have a parent. In such a case, use git commit range "$top_commit" rather than "$bottom_commit^..$top_commit". [ew: line-wrap at 80 columns] Signed-off-by: Michael Haggerty <> Acked-by: Eric Wong <>
2011-06-28git-svn: Disambiguate rev-list arguments to improve error messageMichael Haggerty
Add "--" in the "git rev-list" command line so that if there is a bug and the revisions cannot be found, the error message is a bit less cryptic. Signed-off-by: Michael Haggerty <> Acked-by: Eric Wong <>
2011-05-21Merge branch 'maint'Junio C Hamano
* maint: git-svn: Fix git svn log --show-commit
2011-05-20git-svn: Fix git svn log --show-commitMichael J Gruber
git svn log --show-commit had no tests and, consequently, no attention by the author of b1b4755 (git-log: put space after commit mark, 2011-03-10) who kept git svn log working only without --show-commit. Introduce a test and fix it. Reported-by: Bernt Hansen <> Signed-off-by: Michael J Gruber <> Signed-off-by: Junio C Hamano <>
2011-04-27Merge branch 'mh/git-svn-automkdirs'Junio C Hamano
* mh/git-svn-automkdirs: git-svn: add an option to skip the creation of empty directories
2011-04-09git-svn: Cache results of running the executable "git config"James Y Knight
Running programs is not cheap! Signed-off-by: James Y Knight <> Signed-off-by: Alejandro R. Sedeño <> Acked-by: Eric Wong <>
2011-04-09git-svn: Add a svn-remote.<name>.pushurl config keyAlejandro R. Sedeño
Similar to the 'remote.<name>.pushurl' config key for git remotes, 'pushurl' is designed to be used in cases where 'url' points to an SVN repository via a read-only transport, to provide an alternate read/write transport. It is assumed that both keys point to the same repository. The 'pushurl' key is distinct from the 'commiturl' key in that 'commiturl' is a full svn path while 'pushurl' (like 'url') is a base path. 'commiturl' takes precendece over 'pushurl' in cases where either might be used. The 'pushurl' is used by git-svn's dcommit and branch commands. Signed-off-by: Alejandro R. Sedeño <> Reviewed-by: James Y Knight <> Acked-by: Eric Wong <>
2011-04-01git-svn: add an option to skip the creation of empty directoriesMichael Haggerty
"git svn mkdirs" (which creates empty directories in the current working copy) can be very slow and is often unnecessary. Provide a config file option "svn-remote.<name>.automkdirs" that prevents empty directories from being created automatically. (They are still created if "git svn mkdirs" is invoked explicitly.) Based-on-patch-by: Junio C Hamano <> Signed-off-by: Michael Haggerty <> Signed-off-by: Junio C Hamano <>
2011-03-11git-log: put space after commit markMichael J Gruber
Currently, commit marks (left, right, boundary, cherry) are output right before the commit sha1, which makes it difficult to copy sha1s. Sample output for "git log --oneline --cherry": =049c269 t6007: test rev-list --cherry Change this to = 049c269 t6007: test rev-list --cherry which matches exactly the current output of "git log --graph". Leave "git rev-list" output as is (no space) so that they do not break. Adjust "git-svn" which uses "git log --pretty=raw --boundary". Signed-off-by: Michael J Gruber <> Signed-off-by: Junio C Hamano <>
2010-12-09git-svn: allow the mergeinfo property to be setSteven Walter
As a first step towards preserving merges across dcommit, we need a mechanism to update the svn:mergeinfo property. [ew: fixed bashism and style issues in test case] Signed-off-by: Steven Walter <> Acked-by: Eric Wong <>
2010-10-27Merge branch 'ab/require-perl-5.8'Junio C Hamano
* ab/require-perl-5.8: perl: use "use warnings" instead of -w perl: bump the required Perl version to 5.8 from 5.6.[21]
2010-09-27perl: bump the required Perl version to 5.8 from 5.6.[21]Ævar Arnfjörð Bjarmason
Formalize our dependency on perl 5.8, bumped from 5.6.[12]. We already used the three-arg form of open() which was introduced in 5.6.1, but t/t9700/ explicitly depended on 5.6.2. However has been failing on the 5.6 line since it was introduced in v1.5.0-rc0~12^2~2 back in 2006 due to this open syntax: sub run_cmd_pipe { my $fh = undef; open($fh, '-|', @_) or die; return <$fh>; } Which when executed dies on "Can't use an undefined value as filehandle reference". Several of our tests also fail on 5.6 (even more when compiled with NO_PERL_MAKEMAKER=1): Our code is bitrotting on 5.6 with no-one interested in fixing it, and pinning us to such an ancient release of Perl is keeping us from using useful features introduced in the 5.8 release. The 5.6 series is now over 10 years old, and the 5.6.2 maintenance release almost 7. 5.8 on the other hand is more than 8 years old. All the modern Unix-like operating systems have now upgraded to it or a later version, and 5.8 packages are available for old IRIX, AIX Solaris and Tru64 systems. Signed-off-by: Ævar Arnfjörð Bjarmason <> Acked-by: Tor Arntsen <> Acked-by: Randal L. Schwartz <> Signed-off-by: Junio C Hamano <>
2010-09-24git-svn: fix processing of decorated commit hashesMathias Lafeldt
The function working_head_info() fails to parse commit hashes if they are decorated (i.e. log.decorate is true), causing dcommit, rebase, and other vital git-svn commands to malfunction. This patch disables decorated log output with --no-decorate. [ew: wrapped long line] Signed-off-by: Mathias Lafeldt <> Acked-by: Eric Wong <>
2010-09-24git-svn: check_cherry_pick should exclude commits already in our historySteven Walter
The merge-base between @$parents and $merge_tip may have been reached through a merge commit. This means that some commits that are ancestors of @$parents will not be ancestors of $merge_base. The mergeinfo property will not list commits that are ancestors of @$parents, so we need to explicitly exclude them. [ew: squashed and cleaned up test case from Steven] Signed-off-by: Steven Walter <> Acked-by: Eric Wong <>
2010-08-15git-svn: fix fetch with deleted tagDavid D. Kilzer
Currently git-svn assumes that two tags created from the same revision will have the same repo url, so it uses a ref to the tag without checking that its url matches the current url. This causes issues when fetching an svn repo where a tag was created, deleted, and then recreated under the following circumstances: - Both tags were copied from the same revision. - Both tags had the same name. - Both tags had different repository paths. - [Optional] Both tags have a file with the same name but different content. When all four conditions are met, a checksum mismatch error occurs because the content of two files with the same path differs (see t/ Checksum mismatch: ChangeLog 065854.... expected: ce771b.... got: 9563fd.... When only the first three conditions are met, no error occurs but the tag in git matches the first (deleted) tag instead of the last (most recent) tag (see t/ The fix is to verify that the repo url for the ref matches the current url. If the urls do not match, then a "tail" is grown on the tag name by appending a dash and rechecking the new ref's repo url until either a matching repo url is found or a new tag is created. Signed-off-by: David D. Kilzer <> Acked-by: Eric Wong <>
2010-08-15git-svn: fix regex to remove "tail" from svn tagsDavid D. Kilzer
Fix a regular expression used to remove the revision from the end of an svn tag or branch name. The regex did not account for any "tail" (dashes) that may have been added to the end of the tag name (which first appeared in v1.4.1-rc2~11). If not fixed, tags with names like "tags/mytag@5--@2" may be created. Signed-off-by: David D. Kilzer <> Acked-by: Eric Wong <>
2010-08-05git svn: URL-decode left-hand side of svn refspecSteven Walter
This change allows git-svn to handle an URL with colons in the path [ew: rewritten to use uri_decode() function] Signed-off-by: Eric Wong <>
2010-08-02git svn: fix dcommit to work with touched filesDavid D. Kilzer
The dcommit command fails if an otherwise unmodified file has been touched in the working directory: Cannot dcommit with a dirty index. Commit your changes first, or stash them with `git stash'. This happens because "git diff-index" reports a difference between the index and the filesystem: :100644 100644 d00491...... 000000...... M file The fix is to run "git update-index --refresh" before "git diff-index" as is done in git-rebase and git-rebase--interactive before "git diff-files". This changes dcommit to display a list of modified files before exiting. Also add a similar test case for "git svn rebase". [ew: rearranged commit message subject] Signed-off-by: David D. Kilzer <> Acked-by: Eric Wong <>
2010-07-30git svn: add an option to recode pathnamesDmitry Statyvka
Introduce a new option 'svn.pathnameencoding' that instructs git svn to recode pathnames to a given encoding. It can be used by windows users and by those who work in non-utf8 locales to avoid corrupted file names with non-ascii characters. [rp: renamed the option and added manpage documentation] Signed-off-by: Dmitry Statyvka <> Signed-off-by: Robert Pollak <> Acked-by: Eric Wong <>
2010-07-19git-svn: write memoized data explicitly to avoid Storable bugSergey Vlasov
Apparently using the Storable module during global destruction is unsafe - there is a bug which can cause segmentation faults: The persistent memoization support introduced in commit 8bff7c538 relied on global destruction to write cached data, which was leading to segfaults in some Perl configurations. Calling Memoize::unmemoize in the END block forces the cache writeout to be performed earlier, thus avoiding the bug. Signed-off-by: Sergey Vlasov <> Acked-by: Eric Wong <>
2010-06-14git svn: avoid unnecessary '/' in paths for SVNEric Wong
svn:// servers are more picky regarding redundant slashes than file:// and http(s)://-backed respositories. Since the last commit, we avoid putting unnecessary slashes in $GIT_CONFIG, but this doesn't help users who are already set up that way. Signed-off-by: Eric Wong <>
2010-06-14git-svn: strip off leading slashes on --trunk argumentJonathan Nieder
The following command git svn clone \ -r9500:10006 \ svn:// \ --trunk=/trunk/freedoom \ --branches=/branches/freedoom \ --tags=/tags/freedoom \ freedoom.git.2009091 produces strange results: With v1.6.3.3 (and perhaps earlier versions), this would fetch up to and including r9978 (the last revision of the no_iwad_alternatives branch before it was deleted), check it out, and prematurely declare success, leaving out some commits to the trunk (r9984, r9985, r10006) from after the branch was merged. With v1.6.5-rc0~74 (svn: allow branches outside of refs/remotes, 2009-08-11) and later, this fetches up to and including r9978 and then attempts a post-fetch checkout and fails. r9978 = 25f0920175c395f0f22f54ae7a2318147f745274 (refs/remotes/no_iwad_alternatives) fatal: refs/remotes/trunk: not a valid SHA1 update-ref refs/heads/master refs/remotes/trunk: command returned error: 128 Checking .git/config reveals fetch = packages//trunk/freedoom:refs/remotes/trunk And with both and 1.7.1, using --trunk=trunk/freedom without the leading slash (/) works fine. Moral: git-svn needs to scrub an initial / from $_trunk and related arguments it receives. Make it so. Reported-by: Jon Dowland <> Signed-off-by: Jonathan Nieder <> Acked-by: Eric Wong <>
2010-06-03git svn: fix empty directory creationMichael J. Kiwala
Avoid attempts to stat() the contents of '', which could happen when the root directory is empty. Additionally, remove the unnecessary '_' stat optimization since it was confusing and possibly throwing off the non-existent case. [ew: fixed indentation, rewrote commit message] Acked-by: Eric Wong <> Signed-off-by: Michael J. Kiwala <>
2010-05-09git-svn: mangle refnames forbidden in gitTorsten Schmutzler
git-check-ref-format(1) describes names which cannot be used as refnames for git. Some are legal branchnames in subversion however. Mangle the not yet handled cases. Signed-off-by: Torsten Schmutzler <> Acked-by: Eric Wong <>
2010-05-09git-svn: Remove unused use of File::TempÆvar Arnfjörð Bjarmason
The use line was added in ffe256f9. File::Temp calls were later moved to in 0b19138b, but that commit neglected to remove the now-redundant import. Signed-off-by: Ævar Arnfjörð Bjarmason <> Acked-by: Eric Wong <>
2010-05-09git svn: avoid uninitialized var in 'reset'Jonathan Nieder
When "git svn reset" is called with an invalid revision, we bail out and show the user a proper error message instead of giving them a cryptic one related to git-svn internals. ref: Signed-off-by: Jonathan Nieder <> Reported-by: Jens Seidel <> Acked-by: Eric Wong <>
2010-03-20Merge branch 'fl/askpass'Junio C Hamano
* fl/askpass: git-core: Support retrieving passwords with GIT_ASKPASS git-svn: Support retrieving passwords with GIT_ASKPASS
2010-03-13git-svn: Fix merge detecting with rewrite-rootTuomas Suutari
Detecting of merges from svn:mergeinfo or svk merge tickets failed with rewrite-root option. This fixes it. Signed-off-by: Tuomas Suutari <> Acked-by: Eric Wong <>
2010-03-05git-svn: make git svn --version work againMichael J Gruber
by requesting SVN::Core which is needed for the svn version. Signed-off-by: Michael J Gruber <> Acked-by: Eric Wong <>
2010-03-05Revert "git-svn: always initialize with core.autocrlf=false"Erik Faye-Lund
git-svn rebase used to have issues with CRLF conversion. Since these issues have been fixed, we can safely revert the work-around that disables CRLF conversion. This reverts commit d3c9634eacdcaa71cbd69a160e6f4e80ddb7ab63. Signed-off-by: Erik Faye-Lund <> Acked-by: Eric Wong <>
2010-03-04git-svn: req_svn when neededMichael J Gruber
The delayed loading of SVN missed a place where SVN::Core is used. Make sure to load the package before trying to use it. Signed-off-by: Michael J Gruber <> Acked-by: Eric Wong <>
2010-03-02git-svn: Support retrieving passwords with GIT_ASKPASSFrank Li
git-svn reads passwords from an interactive terminal. This behavior cause GUIs to hang waiting for git-svn to complete Fix this problem by allowing a password-retrieving command to be specified in GIT_ASKPASS. SSH_ASKPASS is supported as a fallback when GIT_ASKPASS is not provided. Signed-off-by: Frank Li <> Signed-off-by: Junio C Hamano <>
2010-03-02Merge branch 'jn/maint-fix-pager'Junio C Hamano
* jn/maint-fix-pager: tests: Fix race condition in t7006-pager t7006-pager: if stdout is not a terminal, make a new one tests: Add tests for automatic use of pager am: Fix launching of pager git svn: Fix launching of pager git.1: Clarify the behavior of the --paginate option Make 'git var GIT_PAGER' always print the configured pager Fix 'git var' usage synopsis
2010-02-26git svn: delay importing SVN::Base until it is neededjosh robb
Importing functions from a .dll into Git for Windows' perl is pretty slow, so let's avoid importing if it is not necessary. This seems particularly slow in virtualized enviroments. Before this change (on my machine): $ time perl /libexec/git-core/git-svn rebase Current branch master is up to date. real 2m56.750s user 0m3.129s sys 2m39.232s Afterwards: $ time perl /libexec/git-core/git-svn rebase Current branch master is up to date. real 0m33.407s user 0m1.409s sys 0m23.054s git svn rebase -n goes from 3m7.046s to 0m10.312s. Signed-off-by: Josh Robb <> Acked-by: Eric Wong <>
2010-02-26git-svn: Fix discarding of extra parents from svn:mergeinfoTuomas Suutari
If parent J is an ancestor of parent I, then parent J should be discarded, not I. Note that J is an ancestor of I if and only if rev-list I..J is emtpy, which is what we are testing here. Signed-off-by: Tuomas Suutari <> Acked-by: Eric Wong <>
2010-02-15git svn: Fix launching of pagerJonathan Nieder
In commit dec543e (am -i, git-svn: use "git var GIT_PAGER"), I tried to teach git svn to defer to git var on what pager to use. In the process, I introduced two bugs: - The value set for $pager in config_pager has local scope, so run_pager never sees it; - git var cannot tell whether git svn’s output is going to a terminal, so the value chosen for $pager does not reflect that information. Fix them. Reported-by: Sebastian Celis <> Signed-off-by: Jonathan Nieder <> Signed-off-by: Junio C Hamano <>
2010-02-05git-svn: persistent memoizationAndrew Myrick
Make memoization of the svn:mergeinfo processing functions persistent with Memoize::Storable so that the memoization tables don't need to be regenerated every time the user runs git-svn fetch. The Memoize::Storable hashes are stored in ENV{GIT_DIR}/svn/.caches. [ew: changed caches path to avoid conflicts with old repos] [ew: File::Path::{make_path => mkpath} for compatibility] [ew: line-wrapped at 80 chars] Acked-by: Eric Wong <> Signed-off-by: Andrew Myrick <>
2010-01-30If deriving SVN_SSH from GIT_SSH on msys, also add quotesSebastian Schuberth
In contrast to GIT_SSH, SVN_SSH requires quotes for paths that contain spaces. As GIT_SSH will not work if it contains quotes, it is safe to assume it never contains quotes. Also, adding quotes to SVN_SSH for paths that do not contain spaces does no harm. So we always add quotes when deriving SVN_SSH from GIT_SSH on msys. This fixes msysGit issue 385, see Signed-off-by: Sebastian Schuberth <> Signed-off-by: Junio C Hamano <>
2010-01-23git-svn: allow subset of branches/tags to be specified in glob specJay Soffian
For very large projects it is useful to be able to clone a subset of the upstream SVN repo's branches. Allow for this by letting the left-side of the branches and tags glob specs contain a brace-delineated comma-separated list of names. e.g.: branches = branches/{red,green}/src:refs/remotes/branches/* Signed-off-by: Jay Soffian <> Acked-by: Eric Wong <>
2010-01-23git-svn: allow UUID to be manually remapped via rewriteUUIDJay Soffian
In certain situations it may be necessary to manually remap an svn repostitory UUID. For example: o--- [git-svn clone] / [origin svn repo] \ o--- [svnsync clone] Imagine that only "git-svn clone" and "svnsync clone" are made available to external users. Furthur, "git-svn clone" contains only trunk, and for reasons unknown, "svnsync clone" is missing the revision properties that normally provide the origin svn repo's UUID. A git user who has cloned the "git-svn clone" repo now wishes to use git-svn to pull in the missing branches from the "synsync clone" repo. In order for git-svn to get the history correct for those branches, it needs to know the origin svn repo's UUID. Hence rewriteUUID. Signed-off-by: Jay Soffian <> Acked-by: Eric Wong <>