Re: [PATCH] add receive.denyNonFastforwards config variable

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

 



Junio C Hamano <junkio@xxxxxxx> wrote:
> Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes:
> 
> > 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 ...
> 
> > @@ -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.

Not to mention how does this work when the ref didn't exist?
Is this entire block of code being bypassed by something not show
in the context?

-- 
Shawn.
-
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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]