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