Merge branch 'mz/remote-rename' into maint-1.7.6
* mz/remote-rename: remote: only update remote-tracking branch if updating refspec remote rename: warn when refspec was not updated remote: "rename o foo" should not rename ref "origin/bar" remote: write correct fetch spec when renaming remote 'remote'maint
						commit
						716b64a73e
					
				|  | @ -580,7 +580,7 @@ static int read_remote_branches(const char *refname, | |||
| 	unsigned char orig_sha1[20]; | ||||
| 	const char *symref; | ||||
|  | ||||
| 	strbuf_addf(&buf, "refs/remotes/%s", rename->old); | ||||
| 	strbuf_addf(&buf, "refs/remotes/%s/", rename->old); | ||||
| 	if (!prefixcmp(refname, buf.buf)) { | ||||
| 		item = string_list_append(rename->remote_branches, xstrdup(refname)); | ||||
| 		symref = resolve_ref(refname, orig_sha1, 1, &flag); | ||||
|  | @ -631,10 +631,11 @@ static int mv(int argc, const char **argv) | |||
| 		OPT_END() | ||||
| 	}; | ||||
| 	struct remote *oldremote, *newremote; | ||||
| 	struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT, buf3 = STRBUF_INIT; | ||||
| 	struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT, buf3 = STRBUF_INIT, | ||||
| 		old_remote_context = STRBUF_INIT; | ||||
| 	struct string_list remote_branches = STRING_LIST_INIT_NODUP; | ||||
| 	struct rename_info rename; | ||||
| 	int i; | ||||
| 	int i, refspec_updated = 0; | ||||
|  | ||||
| 	if (argc != 3) | ||||
| 		usage_with_options(builtin_remote_rename_usage, options); | ||||
|  | @ -669,15 +670,25 @@ static int mv(int argc, const char **argv) | |||
| 	strbuf_addf(&buf, "remote.%s.fetch", rename.new); | ||||
| 	if (git_config_set_multivar(buf.buf, NULL, NULL, 1)) | ||||
| 		return error("Could not remove config section '%s'", buf.buf); | ||||
| 	strbuf_addf(&old_remote_context, ":refs/remotes/%s/", rename.old); | ||||
| 	for (i = 0; i < oldremote->fetch_refspec_nr; i++) { | ||||
| 		char *ptr; | ||||
|  | ||||
| 		strbuf_reset(&buf2); | ||||
| 		strbuf_addstr(&buf2, oldremote->fetch_refspec[i]); | ||||
| 		ptr = strstr(buf2.buf, rename.old); | ||||
| 		if (ptr) | ||||
| 			strbuf_splice(&buf2, ptr-buf2.buf, strlen(rename.old), | ||||
| 					rename.new, strlen(rename.new)); | ||||
| 		ptr = strstr(buf2.buf, old_remote_context.buf); | ||||
| 		if (ptr) { | ||||
| 			refspec_updated = 1; | ||||
| 			strbuf_splice(&buf2, | ||||
| 				      ptr-buf2.buf + strlen(":refs/remotes/"), | ||||
| 				      strlen(rename.old), rename.new, | ||||
| 				      strlen(rename.new)); | ||||
| 		} else | ||||
| 			warning("Not updating non-default fetch respec\n" | ||||
| 				"\t%s\n" | ||||
| 				"\tPlease update the configuration manually if necessary.", | ||||
| 				buf2.buf); | ||||
|  | ||||
| 		if (git_config_set_multivar(buf.buf, buf2.buf, "^$", 0)) | ||||
| 			return error("Could not append '%s'", buf.buf); | ||||
| 	} | ||||
|  | @ -695,6 +706,9 @@ static int mv(int argc, const char **argv) | |||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (!refspec_updated) | ||||
| 		return 0; | ||||
|  | ||||
| 	/* | ||||
| 	 * First remove symrefs, then rename the rest, finally create | ||||
| 	 * the new symrefs. | ||||
|  |  | |||
|  | @ -631,6 +631,37 @@ test_expect_success 'rename a remote' ' | |||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rename does not update a non-default fetch refspec' ' | ||||
|  | ||||
| 	git clone one four.one && | ||||
| 	(cd four.one && | ||||
| 	 git config remote.origin.fetch +refs/heads/*:refs/heads/origin/* && | ||||
| 	 git remote rename origin upstream && | ||||
| 	 test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/heads/origin/*" && | ||||
| 	 git rev-parse -q origin/master) | ||||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rename a remote with name part of fetch spec' ' | ||||
|  | ||||
| 	git clone one four.two && | ||||
| 	(cd four.two && | ||||
| 	 git remote rename origin remote && | ||||
| 	 git remote rename remote upstream && | ||||
| 	 test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*") | ||||
|  | ||||
| ' | ||||
|  | ||||
| test_expect_success 'rename a remote with name prefix of other remote' ' | ||||
|  | ||||
| 	git clone one four.three && | ||||
| 	(cd four.three && | ||||
| 	 git remote add o git://example.com/repo.git && | ||||
| 	 git remote rename o upstream && | ||||
| 	 test "$(git rev-parse origin/master)" = "$(git rev-parse master)") | ||||
|  | ||||
| ' | ||||
|  | ||||
| cat > remotes_origin << EOF | ||||
| URL: $(pwd)/one | ||||
| Push: refs/heads/master:refs/heads/upstream | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano