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:
Jiang Xin
2019-06-04 08:24:28 +08:00
11 changed files with 54 additions and 126 deletions

View File

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

View File

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

View File

@ -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='
' '

View File

@ -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
View File

@ -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"),

View File

@ -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));
} }

View File

@ -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;
}; };

View File

@ -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(

View File

@ -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);

View File

@ -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 &&

View File

@ -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 &&