Merge branch 'ds/advice-sparse-index-expansion'
A new warning message is issued when a command has to expand a sparse index to handle working tree cruft that are outside of the sparse checkout. * ds/advice-sparse-index-expansion: advice: warn when sparse index expands
This commit is contained in:
@@ -116,6 +116,10 @@ advice.*::
|
|||||||
skippedCherryPicks::
|
skippedCherryPicks::
|
||||||
Shown when linkgit:git-rebase[1] skips a commit that has already
|
Shown when linkgit:git-rebase[1] skips a commit that has already
|
||||||
been cherry-picked onto the upstream branch.
|
been cherry-picked onto the upstream branch.
|
||||||
|
sparseIndexExpanded::
|
||||||
|
Shown when a sparse index is expanded to a full index, which is likely
|
||||||
|
due to an unexpected set of files existing outside of the
|
||||||
|
sparse-checkout.
|
||||||
statusAheadBehind::
|
statusAheadBehind::
|
||||||
Shown when linkgit:git-status[1] computes the ahead/behind
|
Shown when linkgit:git-status[1] computes the ahead/behind
|
||||||
counts for a local ref compared to its remote tracking ref,
|
counts for a local ref compared to its remote tracking ref,
|
||||||
|
|||||||
1
advice.c
1
advice.c
@@ -78,6 +78,7 @@ static struct {
|
|||||||
[ADVICE_SEQUENCER_IN_USE] = { "sequencerInUse" },
|
[ADVICE_SEQUENCER_IN_USE] = { "sequencerInUse" },
|
||||||
[ADVICE_SET_UPSTREAM_FAILURE] = { "setUpstreamFailure" },
|
[ADVICE_SET_UPSTREAM_FAILURE] = { "setUpstreamFailure" },
|
||||||
[ADVICE_SKIPPED_CHERRY_PICKS] = { "skippedCherryPicks" },
|
[ADVICE_SKIPPED_CHERRY_PICKS] = { "skippedCherryPicks" },
|
||||||
|
[ADVICE_SPARSE_INDEX_EXPANDED] = { "sparseIndexExpanded" },
|
||||||
[ADVICE_STATUS_AHEAD_BEHIND_WARNING] = { "statusAheadBehindWarning" },
|
[ADVICE_STATUS_AHEAD_BEHIND_WARNING] = { "statusAheadBehindWarning" },
|
||||||
[ADVICE_STATUS_HINTS] = { "statusHints" },
|
[ADVICE_STATUS_HINTS] = { "statusHints" },
|
||||||
[ADVICE_STATUS_U_OPTION] = { "statusUoption" },
|
[ADVICE_STATUS_U_OPTION] = { "statusUoption" },
|
||||||
|
|||||||
1
advice.h
1
advice.h
@@ -45,6 +45,7 @@ enum advice_type {
|
|||||||
ADVICE_SEQUENCER_IN_USE,
|
ADVICE_SEQUENCER_IN_USE,
|
||||||
ADVICE_SET_UPSTREAM_FAILURE,
|
ADVICE_SET_UPSTREAM_FAILURE,
|
||||||
ADVICE_SKIPPED_CHERRY_PICKS,
|
ADVICE_SKIPPED_CHERRY_PICKS,
|
||||||
|
ADVICE_SPARSE_INDEX_EXPANDED,
|
||||||
ADVICE_STATUS_AHEAD_BEHIND_WARNING,
|
ADVICE_STATUS_AHEAD_BEHIND_WARNING,
|
||||||
ADVICE_STATUS_HINTS,
|
ADVICE_STATUS_HINTS,
|
||||||
ADVICE_STATUS_U_OPTION,
|
ADVICE_STATUS_U_OPTION,
|
||||||
|
|||||||
@@ -12,6 +12,22 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "fsmonitor-ll.h"
|
#include "fsmonitor-ll.h"
|
||||||
|
#include "advice.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This global is used by expand_index() to determine if we should give the
|
||||||
|
* advice for advice.sparseIndexExpanded when expanding a sparse index to a full
|
||||||
|
* one. However, this is sometimes done on purpose, such as in the sparse-checkout
|
||||||
|
* builtin, even when index.sparse=false. This may be disabled in
|
||||||
|
* convert_to_sparse().
|
||||||
|
*/
|
||||||
|
static int give_advice_on_expansion = 1;
|
||||||
|
#define ADVICE_MSG \
|
||||||
|
"The sparse index is expanding to a full index, a slow operation.\n" \
|
||||||
|
"Your working directory likely has contents that are outside of\n" \
|
||||||
|
"your sparse-checkout patterns. Use 'git sparse-checkout list' to\n" \
|
||||||
|
"see your sparse-checkout definition and compare it to your working\n" \
|
||||||
|
"directory contents. Running 'git clean' may assist in this cleanup."
|
||||||
|
|
||||||
struct modify_index_context {
|
struct modify_index_context {
|
||||||
struct index_state *write;
|
struct index_state *write;
|
||||||
@@ -183,6 +199,12 @@ int convert_to_sparse(struct index_state *istate, int flags)
|
|||||||
!is_sparse_index_allowed(istate, flags))
|
!is_sparse_index_allowed(istate, flags))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are purposefully collapsing a full index, then don't give
|
||||||
|
* advice when it is expanded later.
|
||||||
|
*/
|
||||||
|
give_advice_on_expansion = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NEEDSWORK: If we have unmerged entries, then stay full.
|
* NEEDSWORK: If we have unmerged entries, then stay full.
|
||||||
* Unmerged entries prevent the cache-tree extension from working.
|
* Unmerged entries prevent the cache-tree extension from working.
|
||||||
@@ -328,6 +350,12 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
|
|||||||
pl = NULL;
|
pl = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pl && give_advice_on_expansion) {
|
||||||
|
give_advice_on_expansion = 0;
|
||||||
|
advise_if_enabled(ADVICE_SPARSE_INDEX_EXPANDED,
|
||||||
|
_(ADVICE_MSG));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A NULL pattern set indicates we are expanding a full index, so
|
* A NULL pattern set indicates we are expanding a full index, so
|
||||||
* we use a special region name that indicates the full expansion.
|
* we use a special region name that indicates the full expansion.
|
||||||
|
|||||||
@@ -159,7 +159,10 @@ init_repos () {
|
|||||||
git -C sparse-checkout sparse-checkout set deep &&
|
git -C sparse-checkout sparse-checkout set deep &&
|
||||||
git -C sparse-index sparse-checkout init --cone --sparse-index &&
|
git -C sparse-index sparse-checkout init --cone --sparse-index &&
|
||||||
test_cmp_config -C sparse-index true index.sparse &&
|
test_cmp_config -C sparse-index true index.sparse &&
|
||||||
git -C sparse-index sparse-checkout set deep
|
git -C sparse-index sparse-checkout set deep &&
|
||||||
|
|
||||||
|
# Disable this message to keep stderr the same.
|
||||||
|
git -C sparse-index config advice.sparseIndexExpanded false
|
||||||
}
|
}
|
||||||
|
|
||||||
init_repos_as_submodules () {
|
init_repos_as_submodules () {
|
||||||
@@ -2331,4 +2334,15 @@ test_expect_success 'sparse-index is not expanded: check-attr' '
|
|||||||
ensure_not_expanded check-attr -a --cached -- folder1/a
|
ensure_not_expanded check-attr -a --cached -- folder1/a
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'advice.sparseIndexExpanded' '
|
||||||
|
init_repos &&
|
||||||
|
|
||||||
|
git -C sparse-index config --unset advice.sparseIndexExpanded &&
|
||||||
|
git -C sparse-index sparse-checkout set deep/deeper1 &&
|
||||||
|
mkdir -p sparse-index/deep/deeper2/deepest &&
|
||||||
|
touch sparse-index/deep/deeper2/deepest/bogus &&
|
||||||
|
git -C sparse-index status 2>err &&
|
||||||
|
grep "The sparse index is expanding to a full index" err
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
Reference in New Issue
Block a user