Skip to content

Commit

Permalink
Merge branch 'master' of git://git.kernel.org/pub/scm/git/git
Browse files Browse the repository at this point in the history
* '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
  • Loading branch information
jiangxin committed Jun 4, 2019
2 parents 1c8ba5f + 74583d8 commit b50e1c0
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 126 deletions.
19 changes: 13 additions & 6 deletions Documentation/RelNotes/2.22.0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ Git 2.22 Release Notes
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

* "git checkout --no-overlay" can be used to trigger a new mode of
Expand Down Expand Up @@ -181,7 +188,7 @@ Performance, Internal Implementation, Development Support etc.
been optimized out.

* Mechanically and systematically drop "extern" from function
declarlation.
declaration.

* The script to aggregate perf result unconditionally depended on
libjson-perl even though it did not have to, which has been
Expand Down Expand Up @@ -270,7 +277,7 @@ Fixes since v2.21
* 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
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
check the return status from our write(2)s).
(merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
Expand Down Expand Up @@ -358,7 +365,7 @@ Fixes since v2.21
(merge b5a0bd694c nd/read-tree-reset-doc later to maint).

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

* The message given when "git commit -a <paths>" errors out has been
Expand Down Expand Up @@ -450,7 +457,7 @@ Fixes since v2.21
* 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
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.
(merge ee521ec4cb cc/replace-graft-peel-tags later to maint).

Expand Down Expand Up @@ -500,7 +507,7 @@ Fixes since v2.21
conflicts are resolved in working tree *.h files but before the
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
gets stopped with a conflict and the user concluded the sequence
with "git commit". Attempt to fix it by cleaning up the state
Expand Down Expand Up @@ -535,7 +542,7 @@ Fixes since v2.21
todo-list "rebase -i -r" uses should not be shown as a hex object
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.
(merge abd0f28983 tz/test-lib-check-working-jgit later to maint).

Expand Down
7 changes: 4 additions & 3 deletions Documentation/rev-list-options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
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
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
Expand All @@ -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
while also including trees and blobs one more level removed from an
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::
Turn off any previous `--filter=` argument.
Expand Down
2 changes: 1 addition & 1 deletion GIT-VERSION-GEN
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh

GVF=GIT-VERSION-FILE
DEF_VER=v2.22.0-rc2
DEF_VER=v2.22.0-rc3

LF='
'
Expand Down
2 changes: 1 addition & 1 deletion contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -1536,7 +1536,7 @@ _git_fetch ()
return
;;
--filter=*)
__gitcomp "blob:none blob:limit= sparse:oid= sparse:path=" "" "${cur##--filter=}"
__gitcomp "blob:none blob:limit= sparse:oid=" "" "${cur##--filter=}"
return
;;
--*)
Expand Down
2 changes: 1 addition & 1 deletion diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -5354,7 +5354,7 @@ static void prep_parse_options(struct diff_options *options)
N_("show the given source prefix instead of \"a/\""),
PARSE_OPT_NONEG),
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),
OPT_CALLBACK_F(0, "line-prefix", options, N_("<prefix>"),
N_("prepend an additional prefix to every line of output"),
Expand Down
10 changes: 6 additions & 4 deletions list-objects-filter-options.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,12 @@ static int gently_parse_list_objects_filter(
return 0;

} else if (skip_prefix(arg, "sparse:path=", &v0)) {
filter_options->choice = LOFC_SPARSE_PATH;
filter_options->sparse_path_value = strdup(v0);
return 0;
if (errbuf) {
strbuf_addstr(
errbuf,
_("sparse:path filters support has been dropped"));
}
return 1;
}
/*
* Please update _git_fetch() in git-completion.bash when you
Expand Down Expand Up @@ -136,7 +139,6 @@ void list_objects_filter_release(
{
free(filter_options->filter_spec);
free(filter_options->sparse_oid_value);
free(filter_options->sparse_path_value);
memset(filter_options, 0, sizeof(*filter_options));
}

Expand Down
2 changes: 0 additions & 2 deletions list-objects-filter-options.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ enum list_objects_filter_choice {
LOFC_BLOB_LIMIT,
LOFC_TREE_DEPTH,
LOFC_SPARSE_OID,
LOFC_SPARSE_PATH,
LOFC__COUNT /* must be last */
};

Expand Down Expand Up @@ -44,7 +43,6 @@ struct list_objects_filter_options {
* choice.
*/
struct object_id *sparse_oid_value;
char *sparse_path_value;
unsigned long blob_limit_value;
unsigned long tree_exclude_depth;
};
Expand Down
22 changes: 0 additions & 22 deletions list-objects-filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -478,27 +478,6 @@ static void *filter_sparse_oid__init(
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)(
struct oidset *omitted,
struct list_objects_filter_options *filter_options,
Expand All @@ -514,7 +493,6 @@ static filter_init_fn s_filters[] = {
filter_blobs_limit__init,
filter_trees_depth__init,
filter_sparse_oid__init,
filter_sparse_path__init,
};

void *list_objects_filter__init(
Expand Down
4 changes: 2 additions & 2 deletions remote-curl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1117,13 +1117,13 @@ static void parse_fetch(struct strbuf *buf)
const char *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 == ' ')
name = q + 1;
else if (!*q)
name = "";
else
die(_("protocol error: expected sha/ref, got %s'"), p);
die(_("protocol error: expected sha/ref, got '%s'"), p);

ref = alloc_ref(name);
oidcpy(&ref->old_oid, &old_oid);
Expand Down
71 changes: 13 additions & 58 deletions t/t5317-pack-objects-filter-objects.sh
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@ test_expect_success 'verify normal and blob:limit packfiles have same commits/tr
'

# 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
# out blobs not required for the corresponding sparse-checkout. We do not
# require sparse-checkout to actually be enabled.
Expand Down Expand Up @@ -315,73 +319,24 @@ test_expect_success 'verify blob count in normal packfile' '
test_cmp expected observed
'

test_expect_success 'verify sparse:path=pattern1' '
git -C r3 ls-files -s dir1/sparse1 dir1/sparse2 >ls_files_result &&
awk -f print_2.awk ls_files_result |
sort >expected &&
git -C r3 pack-objects --revs --stdout --filter=sparse:path=../pattern1 >filter.pack <<-EOF &&
test_expect_success 'verify sparse:path=pattern1 fails' '
test_must_fail git -C r3 pack-objects --revs --stdout \
--filter=sparse:path=../pattern1 <<-EOF
HEAD
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' '
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_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 &&
test_expect_success 'verify sparse:path=pattern2 fails' '
test_must_fail git -C r3 pack-objects --revs --stdout \
--filter=sparse:path=../pattern2 <<-EOF
HEAD
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.
# Like sparse:path, but we get the sparse-checkout specification from
# a blob rather than a file on disk.
# Use a blob containing a sparse-checkout specification to filter
# out blobs not required for the corresponding sparse-checkout. We do not
# require sparse-checkout to actually be enabled.

test_expect_success 'setup r4' '
git init r4 &&
Expand Down
39 changes: 13 additions & 26 deletions t/t6112-rev-list-filters-objects.sh
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ test_expect_success 'verify blob:limit=1m' '
'

# 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
# out blobs not required for the corresponding sparse-checkout. We do not
# require sparse-checkout to actually be enabled.
Expand All @@ -176,37 +180,20 @@ test_expect_success 'setup r3' '
echo sparse1 >pattern2
'

test_expect_success 'verify sparse:path=pattern1 omits top-level files' '
git -C r3 ls-files -s sparse1 sparse2 >ls_files_result &&
awk -f print_2.awk ls_files_result |
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=pattern1 fails' '
test_must_fail git -C r3 rev-list --quiet --objects \
--filter-print-omitted --filter=sparse:path=../pattern1 HEAD
'

test_expect_success 'verify sparse:path=pattern2 omits both sparse2 files' '
git -C r3 ls-files -s sparse2 dir1/sparse2 >ls_files_result &&
awk -f print_2.awk ls_files_result |
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_expect_success 'verify sparse:path=pattern2 fails' '
test_must_fail git -C r3 rev-list --quiet --objects \
--filter-print-omitted --filter=sparse:path=../pattern2 HEAD
'

# Test sparse:oid=<oid-ish> filter.
# Like sparse:path, but we get the sparse-checkout specification from
# a blob rather than a file on disk.
# Use a blob containing a sparse-checkout specification to filter
# 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' '
echo dir1/ >r3/pattern &&
Expand Down

0 comments on commit b50e1c0

Please sign in to comment.