Re: [PATCH] add receive.denyNonFastforwards config variable
- From
Junio C Hamano <junkio@cox.net>
- Date
- Sep 20, 2006, 22:44 UTC
- Message-ID
- <7vfyemf9ah.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.63.0609210027430.19042@wbgn013.biozentrum.uni-wuerzburg.de>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 6 quoted lines
> If receive.denyNonFastforwards is set to true, git-receive-pack will deny > non fast-forwards, i.e. forced updates. Most notably, a push to a repository > which has that flag set to true will fail. > > As a first user, 'git-init-db --shared' sets this flag, since in a shared > setup, you are most unlikely to want forced pushes to succeed.
I am Ok with the general idea, but ...
Show 17 quoted lines
> @@ -127,6 +129,16 @@ static int update(struct command *cmd)
> return error("unpack should have generated %s, "
> "but I can't find it!", new_hex);
> }
> + if (deny_non_fast_forwards) {
> + struct commit *old_commit, *new_commit;
> + old_commit = (struct commit *)parse_object(old_sha1);
> + new_commit = (struct commit *)parse_object(new_sha1);
> + struct commit_list *bases = get_merge_bases(old_commit,
> + new_commit, 1);
> + if (!bases || hashcmp(old_sha1, bases->item->object.sha1))
> + return error("denying non-fast forward;"
> + " you should pull first");
> + }
> safe_create_leading_directories(lock_name);
>
> newfd = open(lock_name, O_CREAT | O_EXCL | O_WRONLY, 0666);I am wondering if there can be more than one base and the old_sha1 is not returned as the first one.