зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/core-use-replace-refs'
A new configuration variable core.usereplacerefs has been added, primarily to help server installations that want to ignore the replace mechanism altogether. * jk/core-use-replace-refs: add core.usereplacerefs config option check_replace_refs: rename to read_replace_refs check_replace_refs: fix outdated comment
This commit is contained in:
Коммит
1689c22c1c
|
@ -924,6 +924,11 @@ gc.commitGraph::
|
|||
required. Default is false. See linkgit:git-commit-graph[1]
|
||||
for details.
|
||||
|
||||
core.useReplaceRefs::
|
||||
If set to `false`, behave as if the `--no-replace-objects`
|
||||
option was given on the command line. See linkgit:git[1] and
|
||||
linkgit:git-replace[1] for more information.
|
||||
|
||||
core.sparseCheckout::
|
||||
Enable "sparse checkout" feature. See section "Sparse checkout" in
|
||||
linkgit:git-read-tree[1] for more information.
|
||||
|
|
|
@ -694,7 +694,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
|
|||
fetch_if_missing = 0;
|
||||
|
||||
errors_found = 0;
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
|
||||
argc = parse_options(argc, argv, prefix, fsck_opts, fsck_usage, 0);
|
||||
|
||||
|
|
|
@ -1680,7 +1680,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
|||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||
usage(index_pack_usage);
|
||||
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
fsck_options.walk = mark_link;
|
||||
|
||||
reset_pack_idx_option(&opts);
|
||||
|
|
|
@ -3188,7 +3188,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
|||
if (DFS_NUM_STATES > (1 << OE_DFS_STATE_BITS))
|
||||
BUG("too many dfs states, increase OE_DFS_STATE_BITS");
|
||||
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
|
||||
reset_pack_idx_option(&pack_idx_opts);
|
||||
git_config(git_pack_config, NULL);
|
||||
|
|
|
@ -118,7 +118,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
|
|||
|
||||
expire = TIME_MAX;
|
||||
save_commit_buffer = 0;
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
ref_paranoia = 1;
|
||||
init_revisions(&revs, prefix);
|
||||
|
||||
|
|
|
@ -544,7 +544,7 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
|
|||
OPT_END()
|
||||
};
|
||||
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
git_config(git_default_config, NULL);
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options, git_replace_usage, 0);
|
||||
|
|
|
@ -514,7 +514,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
|
|||
int i;
|
||||
struct object_id oid;
|
||||
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
|
||||
git_config(git_default_config, NULL);
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
|
|||
};
|
||||
|
||||
packet_trace_identity("upload-pack");
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
|
||||
argc = parse_options(argc, argv, NULL, options, upload_pack_usage, 0);
|
||||
|
||||
|
|
6
cache.h
6
cache.h
|
@ -868,11 +868,9 @@ void reset_shared_repository(void);
|
|||
* Do replace refs need to be checked this run? This variable is
|
||||
* initialized to true unless --no-replace-object is used or
|
||||
* $GIT_NO_REPLACE_OBJECTS is set, but is set to false by some
|
||||
* commands that do not want replace references to be active. As an
|
||||
* optimization it is also set to false if replace references have
|
||||
* been sought but there were none.
|
||||
* commands that do not want replace references to be active.
|
||||
*/
|
||||
extern int check_replace_refs;
|
||||
extern int read_replace_refs;
|
||||
extern char *git_replace_ref_base;
|
||||
|
||||
extern int fsync_object_files;
|
||||
|
|
5
config.c
5
config.c
|
@ -1353,6 +1353,11 @@ static int git_default_core_config(const char *var, const char *value)
|
|||
var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.usereplacerefs")) {
|
||||
read_replace_refs = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.txt. */
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ const char *editor_program;
|
|||
const char *askpass_program;
|
||||
const char *excludes_file;
|
||||
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
|
||||
int check_replace_refs = 1; /* NEEDSWORK: rename to read_replace_refs */
|
||||
int read_replace_refs = 1;
|
||||
char *git_replace_ref_base;
|
||||
enum eol core_eol = EOL_UNSET;
|
||||
int global_conv_flags_eol = CONV_EOL_RNDTRP_WARN;
|
||||
|
@ -182,7 +182,7 @@ void setup_git_env(const char *git_dir)
|
|||
argv_array_clear(&to_free);
|
||||
|
||||
if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
replace_ref_base = getenv(GIT_REPLACE_REF_BASE_ENVIRONMENT);
|
||||
free(git_replace_ref_base);
|
||||
git_replace_ref_base = xstrdup(replace_ref_base ? replace_ref_base
|
||||
|
|
2
git.c
2
git.c
|
@ -164,7 +164,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
|||
if (envchanged)
|
||||
*envchanged = 1;
|
||||
} else if (!strcmp(cmd, "--no-replace-objects")) {
|
||||
check_replace_refs = 0;
|
||||
read_replace_refs = 0;
|
||||
setenv(NO_REPLACE_OBJECTS_ENVIRONMENT, "1", 1);
|
||||
if (envchanged)
|
||||
*envchanged = 1;
|
||||
|
|
|
@ -92,7 +92,7 @@ static int add_ref_decoration(const char *refname, const struct object_id *oid,
|
|||
|
||||
if (starts_with(refname, git_replace_ref_base)) {
|
||||
struct object_id original_oid;
|
||||
if (!check_replace_refs)
|
||||
if (!read_replace_refs)
|
||||
return 0;
|
||||
if (get_oid_hex(refname + strlen(git_replace_ref_base),
|
||||
&original_oid)) {
|
||||
|
|
|
@ -51,7 +51,7 @@ static void prepare_replace_object(struct repository *r)
|
|||
* replacement object's name (replaced recursively, if necessary).
|
||||
* The return value is either oid or a pointer to a
|
||||
* permanently-allocated value. This function always respects replace
|
||||
* references, regardless of the value of check_replace_refs.
|
||||
* references, regardless of the value of read_replace_refs.
|
||||
*/
|
||||
const struct object_id *do_lookup_replace_object(struct repository *r,
|
||||
const struct object_id *oid)
|
||||
|
|
|
@ -26,7 +26,7 @@ extern const struct object_id *do_lookup_replace_object(struct repository *r,
|
|||
static inline const struct object_id *lookup_replace_object(struct repository *r,
|
||||
const struct object_id *oid)
|
||||
{
|
||||
if (!check_replace_refs ||
|
||||
if (!read_replace_refs ||
|
||||
(r->objects->replace_map &&
|
||||
r->objects->replace_map->map.tablesize == 0))
|
||||
return oid;
|
||||
|
|
|
@ -113,6 +113,12 @@ test_expect_success 'test GIT_NO_REPLACE_OBJECTS env variable' '
|
|||
GIT_NO_REPLACE_OBJECTS=1 git show $HASH2 | grep "A U Thor"
|
||||
'
|
||||
|
||||
test_expect_success 'test core.usereplacerefs config option' '
|
||||
test_config core.usereplacerefs false &&
|
||||
git cat-file commit $HASH2 | grep "author A U Thor" &&
|
||||
git show $HASH2 | grep "A U Thor"
|
||||
'
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $HASH2
|
||||
type commit
|
||||
|
|
Загрузка…
Ссылка в новой задаче