mirror of
https://github.com/git/git.git
synced 2024-11-20 11:24:02 +01:00
add receive.denyNonFastforwards config variable
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 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. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7dd45e15c2
commit
11031d7e9f
@ -311,6 +311,7 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
||||
*/
|
||||
sprintf(buf, "%d", shared_repository);
|
||||
git_config_set("core.sharedrepository", buf);
|
||||
git_config_set("receive.denyNonFastforwards", "true");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
1
cache.h
1
cache.h
@ -188,6 +188,7 @@ extern int prefer_symlink_refs;
|
||||
extern int log_all_ref_updates;
|
||||
extern int warn_ambiguous_refs;
|
||||
extern int shared_repository;
|
||||
extern int deny_non_fast_forwards;
|
||||
extern const char *apply_default_whitespace;
|
||||
extern int zlib_compression_level;
|
||||
|
||||
|
@ -20,6 +20,7 @@ int warn_ambiguous_refs = 1;
|
||||
int repository_format_version;
|
||||
char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
|
||||
int shared_repository = PERM_UMASK;
|
||||
int deny_non_fast_forwards = 0;
|
||||
const char *apply_default_whitespace;
|
||||
int zlib_compression_level = Z_DEFAULT_COMPRESSION;
|
||||
int pager_in_use;
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include "refs.h"
|
||||
#include "pkt-line.h"
|
||||
#include "run-command.h"
|
||||
#include "commit.h"
|
||||
#include "object.h"
|
||||
|
||||
static const char receive_pack_usage[] = "git-receive-pack <git-dir>";
|
||||
|
||||
@ -127,6 +129,20 @@ 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 && !is_null_sha1(old_sha1)) {
|
||||
struct commit *old_commit, *new_commit;
|
||||
struct commit_list *bases;
|
||||
|
||||
old_commit = (struct commit *)parse_object(old_sha1);
|
||||
new_commit = (struct commit *)parse_object(new_sha1);
|
||||
for (bases = get_merge_bases(old_commit, new_commit, 1);
|
||||
bases; bases = bases->next)
|
||||
if (!hashcmp(old_sha1, bases->item->object.sha1))
|
||||
break;
|
||||
if (!bases)
|
||||
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);
|
||||
|
2
setup.c
2
setup.c
@ -244,6 +244,8 @@ int check_repository_format_version(const char *var, const char *value)
|
||||
repository_format_version = git_config_int(var, value);
|
||||
else if (strcmp(var, "core.sharedrepository") == 0)
|
||||
shared_repository = git_config_perm(var, value);
|
||||
else if (strcmp(var, "receive.denynonfastforwards") == 0)
|
||||
deny_non_fast_forwards = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user