Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
* 'master' of git://git.kernel.org/pub/scm/git/git: Git 2.22-rc3 i18n: fix typos found during l10n for git 2.22.0 RelNotes: minor typo fixes in 2.22.0 draft list-objects-filter: disable 'sparse:path' filters
This commit is contained in:
@ -4,6 +4,13 @@ Git 2.22 Release Notes
|
|||||||
Updates since v2.21
|
Updates since v2.21
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
Backward compatibility note
|
||||||
|
|
||||||
|
* The filter specification "--filter=sparse:path=<path>" used to
|
||||||
|
create a lazy/partial clone has been removed. Using a blob that is
|
||||||
|
part of the project as sparse specification is still supported with
|
||||||
|
the "--filter=sparse:oid=<blob>" option.
|
||||||
|
|
||||||
UI, Workflows & Features
|
UI, Workflows & Features
|
||||||
|
|
||||||
* "git checkout --no-overlay" can be used to trigger a new mode of
|
* "git checkout --no-overlay" can be used to trigger a new mode of
|
||||||
@ -181,7 +188,7 @@ Performance, Internal Implementation, Development Support etc.
|
|||||||
been optimized out.
|
been optimized out.
|
||||||
|
|
||||||
* Mechanically and systematically drop "extern" from function
|
* Mechanically and systematically drop "extern" from function
|
||||||
declarlation.
|
declaration.
|
||||||
|
|
||||||
* The script to aggregate perf result unconditionally depended on
|
* The script to aggregate perf result unconditionally depended on
|
||||||
libjson-perl even though it did not have to, which has been
|
libjson-perl even though it did not have to, which has been
|
||||||
@ -270,7 +277,7 @@ Fixes since v2.21
|
|||||||
* On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
|
* On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
|
||||||
the upload-pack that runs on the other end that hangs up after
|
the upload-pack that runs on the other end that hangs up after
|
||||||
detecting an error could cause "git fetch" to die with a signal,
|
detecting an error could cause "git fetch" to die with a signal,
|
||||||
which led to a flakey test. "git fetch" now ignores SIGPIPE during
|
which led to a flaky test. "git fetch" now ignores SIGPIPE during
|
||||||
the network portion of its operation (this is not a problem as we
|
the network portion of its operation (this is not a problem as we
|
||||||
check the return status from our write(2)s).
|
check the return status from our write(2)s).
|
||||||
(merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
|
(merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
|
||||||
@ -358,7 +365,7 @@ Fixes since v2.21
|
|||||||
(merge b5a0bd694c nd/read-tree-reset-doc later to maint).
|
(merge b5a0bd694c nd/read-tree-reset-doc later to maint).
|
||||||
|
|
||||||
* Code clean-up around a much-less-important-than-it-used-to-be
|
* Code clean-up around a much-less-important-than-it-used-to-be
|
||||||
update_server_info() funtion.
|
update_server_info() function.
|
||||||
(merge b3223761c8 jk/server-info-rabbit-hole later to maint).
|
(merge b3223761c8 jk/server-info-rabbit-hole later to maint).
|
||||||
|
|
||||||
* The message given when "git commit -a <paths>" errors out has been
|
* The message given when "git commit -a <paths>" errors out has been
|
||||||
@ -450,7 +457,7 @@ Fixes since v2.21
|
|||||||
* When given a tag that points at a commit-ish, "git replace --graft"
|
* When given a tag that points at a commit-ish, "git replace --graft"
|
||||||
failed to peel the tag before writing a replace ref, which did not
|
failed to peel the tag before writing a replace ref, which did not
|
||||||
make sense because the old graft mechanism the feature wants to
|
make sense because the old graft mechanism the feature wants to
|
||||||
mimick only allowed to replace one commit object with another.
|
mimic only allowed to replace one commit object with another.
|
||||||
This has been fixed.
|
This has been fixed.
|
||||||
(merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
|
(merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
|
||||||
|
|
||||||
@ -500,7 +507,7 @@ Fixes since v2.21
|
|||||||
conflicts are resolved in working tree *.h files but before the
|
conflicts are resolved in working tree *.h files but before the
|
||||||
resolved results are added to the index. This has been corrected.
|
resolved results are added to the index. This has been corrected.
|
||||||
|
|
||||||
* "git chery-pick" (and "revert" that shares the same runtime engine)
|
* "git cherry-pick" (and "revert" that shares the same runtime engine)
|
||||||
that deals with multiple commits got confused when the final step
|
that deals with multiple commits got confused when the final step
|
||||||
gets stopped with a conflict and the user concluded the sequence
|
gets stopped with a conflict and the user concluded the sequence
|
||||||
with "git commit". Attempt to fix it by cleaning up the state
|
with "git commit". Attempt to fix it by cleaning up the state
|
||||||
@ -535,7 +542,7 @@ Fixes since v2.21
|
|||||||
todo-list "rebase -i -r" uses should not be shown as a hex object
|
todo-list "rebase -i -r" uses should not be shown as a hex object
|
||||||
name.
|
name.
|
||||||
|
|
||||||
* A prerequiste check in the test suite to see if a working jgit is
|
* A prerequisite check in the test suite to see if a working jgit is
|
||||||
available was made more robust.
|
available was made more robust.
|
||||||
(merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
|
(merge abd0f28983 tz/test-lib-check-working-jgit later to maint).
|
||||||
|
|
||||||
|
@ -725,9 +725,6 @@ specification contained in the blob (or blob-expression) '<blob-ish>'
|
|||||||
to omit blobs that would not be not required for a sparse checkout on
|
to omit blobs that would not be not required for a sparse checkout on
|
||||||
the requested refs.
|
the requested refs.
|
||||||
+
|
+
|
||||||
The form '--filter=sparse:path=<path>' similarly uses a sparse-checkout
|
|
||||||
specification contained in <path>.
|
|
||||||
+
|
|
||||||
The form '--filter=tree:<depth>' omits all blobs and trees whose depth
|
The form '--filter=tree:<depth>' omits all blobs and trees whose depth
|
||||||
from the root tree is >= <depth> (minimum depth if an object is located
|
from the root tree is >= <depth> (minimum depth if an object is located
|
||||||
at multiple depths in the commits traversed). <depth>=0 will not include
|
at multiple depths in the commits traversed). <depth>=0 will not include
|
||||||
@ -737,6 +734,10 @@ tree and blobs which are referenced directly by a commit reachable from
|
|||||||
<commit> or an explicitly-given object. <depth>=2 is like <depth>=1
|
<commit> or an explicitly-given object. <depth>=2 is like <depth>=1
|
||||||
while also including trees and blobs one more level removed from an
|
while also including trees and blobs one more level removed from an
|
||||||
explicitly-given commit or tree.
|
explicitly-given commit or tree.
|
||||||
|
+
|
||||||
|
Note that the form '--filter=sparse:path=<path>' that wants to read
|
||||||
|
from an arbitrary path on the filesystem has been dropped for security
|
||||||
|
reasons.
|
||||||
|
|
||||||
--no-filter::
|
--no-filter::
|
||||||
Turn off any previous `--filter=` argument.
|
Turn off any previous `--filter=` argument.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
GVF=GIT-VERSION-FILE
|
GVF=GIT-VERSION-FILE
|
||||||
DEF_VER=v2.22.0-rc2
|
DEF_VER=v2.22.0-rc3
|
||||||
|
|
||||||
LF='
|
LF='
|
||||||
'
|
'
|
||||||
|
@ -1536,7 +1536,7 @@ _git_fetch ()
|
|||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
--filter=*)
|
--filter=*)
|
||||||
__gitcomp "blob:none blob:limit= sparse:oid= sparse:path=" "" "${cur##--filter=}"
|
__gitcomp "blob:none blob:limit= sparse:oid=" "" "${cur##--filter=}"
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
--*)
|
--*)
|
||||||
|
2
diff.c
2
diff.c
@ -5354,7 +5354,7 @@ static void prep_parse_options(struct diff_options *options)
|
|||||||
N_("show the given source prefix instead of \"a/\""),
|
N_("show the given source prefix instead of \"a/\""),
|
||||||
PARSE_OPT_NONEG),
|
PARSE_OPT_NONEG),
|
||||||
OPT_STRING_F(0, "dst-prefix", &options->b_prefix, N_("<prefix>"),
|
OPT_STRING_F(0, "dst-prefix", &options->b_prefix, N_("<prefix>"),
|
||||||
N_("show the given source prefix instead of \"b/\""),
|
N_("show the given destination prefix instead of \"b/\""),
|
||||||
PARSE_OPT_NONEG),
|
PARSE_OPT_NONEG),
|
||||||
OPT_CALLBACK_F(0, "line-prefix", options, N_("<prefix>"),
|
OPT_CALLBACK_F(0, "line-prefix", options, N_("<prefix>"),
|
||||||
N_("prepend an additional prefix to every line of output"),
|
N_("prepend an additional prefix to every line of output"),
|
||||||
|
@ -78,9 +78,12 @@ static int gently_parse_list_objects_filter(
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
} else if (skip_prefix(arg, "sparse:path=", &v0)) {
|
} else if (skip_prefix(arg, "sparse:path=", &v0)) {
|
||||||
filter_options->choice = LOFC_SPARSE_PATH;
|
if (errbuf) {
|
||||||
filter_options->sparse_path_value = strdup(v0);
|
strbuf_addstr(
|
||||||
return 0;
|
errbuf,
|
||||||
|
_("sparse:path filters support has been dropped"));
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Please update _git_fetch() in git-completion.bash when you
|
* Please update _git_fetch() in git-completion.bash when you
|
||||||
@ -136,7 +139,6 @@ void list_objects_filter_release(
|
|||||||
{
|
{
|
||||||
free(filter_options->filter_spec);
|
free(filter_options->filter_spec);
|
||||||
free(filter_options->sparse_oid_value);
|
free(filter_options->sparse_oid_value);
|
||||||
free(filter_options->sparse_path_value);
|
|
||||||
memset(filter_options, 0, sizeof(*filter_options));
|
memset(filter_options, 0, sizeof(*filter_options));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ enum list_objects_filter_choice {
|
|||||||
LOFC_BLOB_LIMIT,
|
LOFC_BLOB_LIMIT,
|
||||||
LOFC_TREE_DEPTH,
|
LOFC_TREE_DEPTH,
|
||||||
LOFC_SPARSE_OID,
|
LOFC_SPARSE_OID,
|
||||||
LOFC_SPARSE_PATH,
|
|
||||||
LOFC__COUNT /* must be last */
|
LOFC__COUNT /* must be last */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -44,7 +43,6 @@ struct list_objects_filter_options {
|
|||||||
* choice.
|
* choice.
|
||||||
*/
|
*/
|
||||||
struct object_id *sparse_oid_value;
|
struct object_id *sparse_oid_value;
|
||||||
char *sparse_path_value;
|
|
||||||
unsigned long blob_limit_value;
|
unsigned long blob_limit_value;
|
||||||
unsigned long tree_exclude_depth;
|
unsigned long tree_exclude_depth;
|
||||||
};
|
};
|
||||||
|
@ -478,27 +478,6 @@ static void *filter_sparse_oid__init(
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *filter_sparse_path__init(
|
|
||||||
struct oidset *omitted,
|
|
||||||
struct list_objects_filter_options *filter_options,
|
|
||||||
filter_object_fn *filter_fn,
|
|
||||||
filter_free_fn *filter_free_fn)
|
|
||||||
{
|
|
||||||
struct filter_sparse_data *d = xcalloc(1, sizeof(*d));
|
|
||||||
d->omits = omitted;
|
|
||||||
if (add_excludes_from_file_to_list(filter_options->sparse_path_value,
|
|
||||||
NULL, 0, &d->el, NULL) < 0)
|
|
||||||
die("could not load filter specification");
|
|
||||||
|
|
||||||
ALLOC_GROW(d->array_frame, d->nr + 1, d->alloc);
|
|
||||||
d->array_frame[d->nr].defval = 0; /* default to include */
|
|
||||||
d->array_frame[d->nr].child_prov_omit = 0;
|
|
||||||
|
|
||||||
*filter_fn = filter_sparse;
|
|
||||||
*filter_free_fn = filter_sparse_free;
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef void *(*filter_init_fn)(
|
typedef void *(*filter_init_fn)(
|
||||||
struct oidset *omitted,
|
struct oidset *omitted,
|
||||||
struct list_objects_filter_options *filter_options,
|
struct list_objects_filter_options *filter_options,
|
||||||
@ -514,7 +493,6 @@ static filter_init_fn s_filters[] = {
|
|||||||
filter_blobs_limit__init,
|
filter_blobs_limit__init,
|
||||||
filter_trees_depth__init,
|
filter_trees_depth__init,
|
||||||
filter_sparse_oid__init,
|
filter_sparse_oid__init,
|
||||||
filter_sparse_path__init,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void *list_objects_filter__init(
|
void *list_objects_filter__init(
|
||||||
|
@ -1117,13 +1117,13 @@ static void parse_fetch(struct strbuf *buf)
|
|||||||
const char *q;
|
const char *q;
|
||||||
|
|
||||||
if (parse_oid_hex(p, &old_oid, &q))
|
if (parse_oid_hex(p, &old_oid, &q))
|
||||||
die(_("protocol error: expected sha/ref, got %s'"), p);
|
die(_("protocol error: expected sha/ref, got '%s'"), p);
|
||||||
if (*q == ' ')
|
if (*q == ' ')
|
||||||
name = q + 1;
|
name = q + 1;
|
||||||
else if (!*q)
|
else if (!*q)
|
||||||
name = "";
|
name = "";
|
||||||
else
|
else
|
||||||
die(_("protocol error: expected sha/ref, got %s'"), p);
|
die(_("protocol error: expected sha/ref, got '%s'"), p);
|
||||||
|
|
||||||
ref = alloc_ref(name);
|
ref = alloc_ref(name);
|
||||||
oidcpy(&ref->old_oid, &old_oid);
|
oidcpy(&ref->old_oid, &old_oid);
|
||||||
|
@ -277,6 +277,10 @@ test_expect_success 'verify normal and blob:limit packfiles have same commits/tr
|
|||||||
'
|
'
|
||||||
|
|
||||||
# Test sparse:path=<path> filter.
|
# Test sparse:path=<path> filter.
|
||||||
|
# !!!!
|
||||||
|
# NOTE: sparse:path filter support has been dropped for security reasons,
|
||||||
|
# so the tests have been changed to make sure that using it fails.
|
||||||
|
# !!!!
|
||||||
# Use a local file containing a sparse-checkout specification to filter
|
# Use a local file containing a sparse-checkout specification to filter
|
||||||
# out blobs not required for the corresponding sparse-checkout. We do not
|
# out blobs not required for the corresponding sparse-checkout. We do not
|
||||||
# require sparse-checkout to actually be enabled.
|
# require sparse-checkout to actually be enabled.
|
||||||
@ -315,73 +319,24 @@ test_expect_success 'verify blob count in normal packfile' '
|
|||||||
test_cmp expected observed
|
test_cmp expected observed
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'verify sparse:path=pattern1' '
|
test_expect_success 'verify sparse:path=pattern1 fails' '
|
||||||
git -C r3 ls-files -s dir1/sparse1 dir1/sparse2 >ls_files_result &&
|
test_must_fail git -C r3 pack-objects --revs --stdout \
|
||||||
awk -f print_2.awk ls_files_result |
|
--filter=sparse:path=../pattern1 <<-EOF
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 pack-objects --revs --stdout --filter=sparse:path=../pattern1 >filter.pack <<-EOF &&
|
|
||||||
HEAD
|
HEAD
|
||||||
EOF
|
EOF
|
||||||
git -C r3 index-pack ../filter.pack &&
|
|
||||||
|
|
||||||
git -C r3 verify-pack -v ../filter.pack >verify_result &&
|
|
||||||
grep blob verify_result |
|
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'verify normal and sparse:path=pattern1 packfiles have same commits/trees' '
|
test_expect_success 'verify sparse:path=pattern2 fails' '
|
||||||
git -C r3 verify-pack -v ../all.pack >verify_result &&
|
test_must_fail git -C r3 pack-objects --revs --stdout \
|
||||||
grep -E "commit|tree" verify_result |
|
--filter=sparse:path=../pattern2 <<-EOF
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 verify-pack -v ../filter.pack >verify_result &&
|
|
||||||
grep -E "commit|tree" verify_result |
|
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'verify sparse:path=pattern2' '
|
|
||||||
git -C r3 ls-files -s sparse1 dir1/sparse1 >ls_files_result &&
|
|
||||||
awk -f print_2.awk ls_files_result |
|
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 pack-objects --revs --stdout --filter=sparse:path=../pattern2 >filter.pack <<-EOF &&
|
|
||||||
HEAD
|
HEAD
|
||||||
EOF
|
EOF
|
||||||
git -C r3 index-pack ../filter.pack &&
|
|
||||||
|
|
||||||
git -C r3 verify-pack -v ../filter.pack >verify_result &&
|
|
||||||
grep blob verify_result |
|
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'verify normal and sparse:path=pattern2 packfiles have same commits/trees' '
|
|
||||||
git -C r3 verify-pack -v ../all.pack >verify_result &&
|
|
||||||
grep -E "commit|tree" verify_result |
|
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 verify-pack -v ../filter.pack >verify_result &&
|
|
||||||
grep -E "commit|tree" verify_result |
|
|
||||||
awk -f print_1.awk |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
'
|
||||||
|
|
||||||
# Test sparse:oid=<oid-ish> filter.
|
# Test sparse:oid=<oid-ish> filter.
|
||||||
# Like sparse:path, but we get the sparse-checkout specification from
|
# Use a blob containing a sparse-checkout specification to filter
|
||||||
# a blob rather than a file on disk.
|
# out blobs not required for the corresponding sparse-checkout. We do not
|
||||||
|
# require sparse-checkout to actually be enabled.
|
||||||
|
|
||||||
test_expect_success 'setup r4' '
|
test_expect_success 'setup r4' '
|
||||||
git init r4 &&
|
git init r4 &&
|
||||||
|
@ -157,6 +157,10 @@ test_expect_success 'verify blob:limit=1m' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
# Test sparse:path=<path> filter.
|
# Test sparse:path=<path> filter.
|
||||||
|
# !!!!
|
||||||
|
# NOTE: sparse:path filter support has been dropped for security reasons,
|
||||||
|
# so the tests have been changed to make sure that using it fails.
|
||||||
|
# !!!!
|
||||||
# Use a local file containing a sparse-checkout specification to filter
|
# Use a local file containing a sparse-checkout specification to filter
|
||||||
# out blobs not required for the corresponding sparse-checkout. We do not
|
# out blobs not required for the corresponding sparse-checkout. We do not
|
||||||
# require sparse-checkout to actually be enabled.
|
# require sparse-checkout to actually be enabled.
|
||||||
@ -176,37 +180,20 @@ test_expect_success 'setup r3' '
|
|||||||
echo sparse1 >pattern2
|
echo sparse1 >pattern2
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'verify sparse:path=pattern1 omits top-level files' '
|
test_expect_success 'verify sparse:path=pattern1 fails' '
|
||||||
git -C r3 ls-files -s sparse1 sparse2 >ls_files_result &&
|
test_must_fail git -C r3 rev-list --quiet --objects \
|
||||||
awk -f print_2.awk ls_files_result |
|
--filter-print-omitted --filter=sparse:path=../pattern1 HEAD
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 rev-list --quiet --objects --filter-print-omitted \
|
|
||||||
--filter=sparse:path=../pattern1 HEAD >revs &&
|
|
||||||
awk -f print_1.awk revs |
|
|
||||||
sed "s/~//" |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'verify sparse:path=pattern2 omits both sparse2 files' '
|
test_expect_success 'verify sparse:path=pattern2 fails' '
|
||||||
git -C r3 ls-files -s sparse2 dir1/sparse2 >ls_files_result &&
|
test_must_fail git -C r3 rev-list --quiet --objects \
|
||||||
awk -f print_2.awk ls_files_result |
|
--filter-print-omitted --filter=sparse:path=../pattern2 HEAD
|
||||||
sort >expected &&
|
|
||||||
|
|
||||||
git -C r3 rev-list --quiet --objects --filter-print-omitted \
|
|
||||||
--filter=sparse:path=../pattern2 HEAD >revs &&
|
|
||||||
awk -f print_1.awk revs |
|
|
||||||
sed "s/~//" |
|
|
||||||
sort >observed &&
|
|
||||||
|
|
||||||
test_cmp expected observed
|
|
||||||
'
|
'
|
||||||
|
|
||||||
# Test sparse:oid=<oid-ish> filter.
|
# Test sparse:oid=<oid-ish> filter.
|
||||||
# Like sparse:path, but we get the sparse-checkout specification from
|
# Use a blob containing a sparse-checkout specification to filter
|
||||||
# a blob rather than a file on disk.
|
# out blobs not required for the corresponding sparse-checkout. We do not
|
||||||
|
# require sparse-checkout to actually be enabled.
|
||||||
|
|
||||||
test_expect_success 'setup r3 part 2' '
|
test_expect_success 'setup r3 part 2' '
|
||||||
echo dir1/ >r3/pattern &&
|
echo dir1/ >r3/pattern &&
|
||||||
|
Reference in New Issue
Block a user