Merge early part of git-svn into maint
* 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"maint
						commit
						d4da4bc764
					
				|  | @ -56,6 +56,8 @@ COMMANDS | ||||||
| 	as well, they take precedence. | 	as well, they take precedence. | ||||||
| --no-metadata;; | --no-metadata;; | ||||||
| 	Set the 'noMetadata' option in the [svn-remote] config. | 	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;; | --use-svm-props;; | ||||||
| 	Set the 'useSvmProps' option in the [svn-remote] config. | 	Set the 'useSvmProps' option in the [svn-remote] config. | ||||||
| --use-svnsync-props;; | --use-svnsync-props;; | ||||||
|  | @ -597,13 +599,22 @@ svn.noMetadata:: | ||||||
| svn-remote.<name>.noMetadata:: | svn-remote.<name>.noMetadata:: | ||||||
| 	This gets rid of the 'git-svn-id:' lines at the end of every commit. | 	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 | This option can only be used for one-shot imports as 'git svn' | ||||||
| be able to rebuild it and you won't be able to fetch again, | will not be able to fetch again without metadata. Additionally, | ||||||
| either.  This is fine for one-shot imports. | 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 | The 'git svn log' command will not work on repositories using | ||||||
| this, either.  Using this conflicts with the 'useSvmProps' | this, either.  Using this conflicts with the 'useSvmProps' | ||||||
| option for (hopefully) obvious reasons. | 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.useSvmProps:: | ||||||
| svn-remote.<name>.useSvmProps:: | svn-remote.<name>.useSvmProps:: | ||||||
|  |  | ||||||
|  | @ -1513,7 +1513,8 @@ sub cmt_sha2rev_batch { | ||||||
|  |  | ||||||
| sub working_head_info { | sub working_head_info { | ||||||
| 	my ($head, $refs) = @_; | 	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 ($fh, $ctx) = command_output_pipe(@args, $head); | ||||||
| 	my $hash; | 	my $hash; | ||||||
| 	my %max; | 	my %max; | ||||||
|  | @ -3118,9 +3119,10 @@ sub _rev_list { | ||||||
| sub check_cherry_pick { | sub check_cherry_pick { | ||||||
| 	my $base = shift; | 	my $base = shift; | ||||||
| 	my $tip = shift; | 	my $tip = shift; | ||||||
|  | 	my $parents = shift; | ||||||
| 	my @ranges = @_; | 	my @ranges = @_; | ||||||
| 	my %commits = map { $_ => 1 } | 	my %commits = map { $_ => 1 } | ||||||
| 		_rev_list("--no-merges", $tip, "--not", $base); | 		_rev_list("--no-merges", $tip, "--not", $base, @$parents); | ||||||
| 	for my $range ( @ranges ) { | 	for my $range ( @ranges ) { | ||||||
| 		delete @commits{_rev_list($range)}; | 		delete @commits{_rev_list($range)}; | ||||||
| 	} | 	} | ||||||
|  | @ -3296,6 +3298,7 @@ sub find_extra_svn_parents { | ||||||
| 		# double check that there are no missing non-merge commits | 		# double check that there are no missing non-merge commits | ||||||
| 		my (@incomplete) = check_cherry_pick( | 		my (@incomplete) = check_cherry_pick( | ||||||
| 			$merge_base, $merge_tip, | 			$merge_base, $merge_tip, | ||||||
|  | 			$parents, | ||||||
| 			@$ranges, | 			@$ranges, | ||||||
| 		       ); | 		       ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano