Re: push.default: current vs upstream

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


On Tue, Apr 03, 2012 at 04:59:07PM -0400, Jeff King wrote:

> > +		if (!push_url_of_remote(remote, &dest_url) ||
> > +		    !push_url_of_remote(branch_dest, &branch_dest_url) ||
> > +		    strcmp(dest_url[0], branch_dest_url[0]))
> > +			die(_("You are pushing to remote '%s', which is not the "
> > +			      "upstream of your\ncurrent branch '%s'.\n"),
> > +			    remote->name, branch->name);
> > +	}
> 
> Hmm. So this will actually detect "git push $URL" when $URL matches the
> remote's configured URL. I feel like this distinction has come up
> before, and we decided not to equate the two. But now I can't remember
> where (maybe it when fetching via URL versus via remote?).
> 
> What should happen if there are multiple push URLs configured? Your code
> will match iff it is the first one. I would think it should either
> require all to match, or it should proceed if any of the URLs match.
> I think the latter makes more sense, though personally I would simply
> have compared the remote names.

If this is the behavior we want, here are some squashable tests (on top
of my other tests) to check the URL-matching, and to expose the
multiple-URL case.

---
diff --git a/t/t5528-push-default.sh b/t/t5528-push-default.sh
index c334c51..d809615 100755
--- a/t/t5528-push-default.sh
+++ b/t/t5528-push-default.sh
@@ -51,4 +51,29 @@ test_expect_success '"upstream" does not push when remotes do not match' '
 	test_must_fail git push parent2
 '
 
+test_expect_success '"upstream" remote-match checks URLs' '
+	git checkout master &&
+	test_config branch.master.remote parent1 &&
+	test_config branch.master.merge refs/heads/foo &&
+	test_config push.default upstream &&
+	test_commit six &&
+	git push repo1 &&
+	echo six >expect &&
+	git --git-dir=repo1 log -1 --format=%s foo >actual &&
+	test_cmp expect actual
+'
+
+test_expect_failure '"upstream" remote-match checks all URLs' '
+	git checkout master &&
+	git config --add remote.parent1.push repo2 &&
+	test_config branch.master.remote parent1 &&
+	test_config branch.master.merge refs/heads/foo &&
+	test_config push.default upstream &&
+	test_commit seven &&
+	git push repo2 &&
+	echo seven >expect &&
+	git --git-dir=repo2 log -1 --format=%s foo >actual &&
+	test_cmp expect actual
+'
+
 test_done
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Newbies FAQ]     [Linux Kernel Development]     [Free Online Dating]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Free Online Dating]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]     [Linux Resources]

Add to Google