Skip to content

Commit

Permalink
Merge early part of git-svn into maint
Browse files Browse the repository at this point in the history
* commit 'git-svn/master~1':
  git-svn: fix processing of decorated commit hashes
  git-svn: check_cherry_pick should exclude commits already in our history
  Documentation/git-svn: discourage "noMetadata"
  • Loading branch information
Junio C Hamano committed Oct 5, 2010
2 parents 2d2ef5e + 8565a56 commit d4da4bc
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 5 deletions.
17 changes: 14 additions & 3 deletions Documentation/git-svn.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ COMMANDS
as well, they take precedence.
--no-metadata;;
Set the 'noMetadata' option in the [svn-remote] config.
This option is not recommended, please read the 'svn.noMetadata'
section of this manpage before using this option.
--use-svm-props;;
Set the 'useSvmProps' option in the [svn-remote] config.
--use-svnsync-props;;
Expand Down Expand Up @@ -597,13 +599,22 @@ svn.noMetadata::
svn-remote.<name>.noMetadata::
This gets rid of the 'git-svn-id:' lines at the end of every commit.
+
If you lose your .git/svn/git-svn/.rev_db file, 'git svn' will not
be able to rebuild it and you won't be able to fetch again,
either. This is fine for one-shot imports.
This option can only be used for one-shot imports as 'git svn'
will not be able to fetch again without metadata. Additionally,
if you lose your .git/svn/**/.rev_map.* files, 'git svn' will not
be able to rebuild them.
+
The 'git svn log' command will not work on repositories using
this, either. Using this conflicts with the 'useSvmProps'
option for (hopefully) obvious reasons.
+
This option is NOT recommended as it makes it difficult to track down
old references to SVN revision numbers in existing documentation, bug
reports and archives. If you plan to eventually migrate from SVN to git
and are certain about dropping SVN history, consider
linkgit:git-filter-branch[1] instead. filter-branch also allows
reformating of metadata for ease-of-reading and rewriting authorship
info for non-"svn.authorsFile" users.

svn.useSvmProps::
svn-remote.<name>.useSvmProps::
Expand Down
7 changes: 5 additions & 2 deletions git-svn.perl
Original file line number Diff line number Diff line change
Expand Up @@ -1513,7 +1513,8 @@ sub cmt_sha2rev_batch {

sub working_head_info {
my ($head, $refs) = @_;
my @args = ('log', '--no-color', '--first-parent', '--pretty=medium');
my @args = qw/log --no-color --no-decorate --first-parent
--pretty=medium/;
my ($fh, $ctx) = command_output_pipe(@args, $head);
my $hash;
my %max;
Expand Down Expand Up @@ -3118,9 +3119,10 @@ sub _rev_list {
sub check_cherry_pick {
my $base = shift;
my $tip = shift;
my $parents = shift;
my @ranges = @_;
my %commits = map { $_ => 1 }
_rev_list("--no-merges", $tip, "--not", $base);
_rev_list("--no-merges", $tip, "--not", $base, @$parents);
for my $range ( @ranges ) {
delete @commits{_rev_list($range)};
}
Expand Down Expand Up @@ -3296,6 +3298,7 @@ sub find_extra_svn_parents {
# double check that there are no missing non-merge commits
my (@incomplete) = check_cherry_pick(
$merge_base, $merge_tip,
$parents,
@$ranges,
);

Expand Down
50 changes: 50 additions & 0 deletions t/t9157-git-svn-fetch-merge.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/sh
#
# Copyright (c) 2010 Steven Walter
#

test_description='git svn merge detection'
. ./lib-git-svn.sh

test_expect_success 'initialize source svn repo' '
svn_cmd mkdir -m x "$svnrepo"/trunk &&
svn_cmd mkdir -m x "$svnrepo"/branches &&
svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
(
cd "$SVN_TREE" &&
touch foo &&
svn add foo &&
svn commit -m "initial commit" &&
svn cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch1 &&
touch bar &&
svn add bar &&
svn commit -m x &&
svn cp -m branch "$svnrepo"/trunk "$svnrepo"/branches/branch2 &&
svn switch "$svnrepo"/branches/branch1 &&
touch baz &&
svn add baz &&
svn commit -m x &&
svn switch "$svnrepo"/trunk &&
svn merge "$svnrepo"/branches/branch1 &&
svn commit -m "merge" &&
svn switch "$svnrepo"/branches/branch1 &&
svn commit -m x &&
svn switch "$svnrepo"/branches/branch2 &&
svn merge "$svnrepo"/branches/branch1 &&
svn commit -m "merge branch1" &&
svn switch "$svnrepo"/trunk &&
svn merge "$svnrepo"/branches/branch2 &&
svn resolved baz &&
svn commit -m "merge branch2"
) &&
rm -rf "$SVN_TREE"
'

test_expect_success 'clone svn repo' '
git svn init -s "$svnrepo" &&
git svn fetch
'

test_expect_success 'verify merge commit' 'git rev-parse HEAD^2'

test_done

0 comments on commit d4da4bc

Please sign in to comment.