Re: [PATCH 18/18] git receive-pack: support excluding objects from fsck'ing
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Dec 22, 2014, 22:19 UTC
- Message-ID
- <alpine.DEB.1.00.1412222319040.21312@s15462909.onlinehome-server.info>
- In-Reply-To
- <xmqqvbljgy8y.fsf@gitster.dls.corp.google.com>
Hi Junio,
On Wed, 10 Dec 2014, Junio C Hamano wrote:
Show 73 quoted lines
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
> > The optional new config option `receive.fsck.skip-list` specifies the path
> > to a file listing the names, i.e. SHA-1s, one per line, of objects that
> > are to be ignored by `git receive-pack` when `receive.fsckObjects = true`.
> >
> > This is extremely handy in case of legacy repositories where it would
> > cause more pain to change incorrect objects than to live with them
> > (e.g. a duplicate 'author' line in an early commit object).
> >
> > The intended use case is for server administrators to inspect objects
> > that are reported by `git push` as being too problematic to enter the
> > repository, and to add the objects' SHA-1 to a (preferably sorted) file
> > when the objects are legitimate, i.e. when it is determined that those
> > problematic objects should be allowed to enter the server.
> >
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> > builtin/receive-pack.c | 9 +++++++
> > fsck.c | 59 +++++++++++++++++++++++++++++++++++++++--
> > fsck.h | 2 ++
> > t/t5504-fetch-receive-strict.sh | 12 +++++++++
> > 4 files changed, 80 insertions(+), 2 deletions(-)
> >
> > diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
> > index 111e514..5169f1f 100644
> > --- a/builtin/receive-pack.c
> > +++ b/builtin/receive-pack.c
> > @@ -110,6 +110,15 @@ static int receive_pack_config(const char *var, const char *value, void *cb)
> > return 0;
> > }
> >
> > + if (starts_with(var, "receive.fsck.skip-list")) {
>
> s/skip-list/skiplist/;
>
> > + const char *path = is_absolute_path(value) ?
> > + value : git_path("%s", value);
> > + if (fsck_strict_mode.len)
> > + strbuf_addch(&fsck_strict_mode, ',');
> > + strbuf_addf(&fsck_strict_mode, "skip-list=%s", path);
> > + return 0;
> > + }
> > +
> > if (starts_with(var, "receive.fsck.")) {
> > if (fsck_strict_mode.len)
> > strbuf_addch(&fsck_strict_mode, ',');
> > diff --git a/fsck.c b/fsck.c
> > index 154f361..00693f2 100644
> > --- a/fsck.c
> > +++ b/fsck.c
> > @@ -7,6 +7,7 @@
> > #include "tag.h"
> > #include "fsck.h"
> > #include "refs.h"
> > +#include "sha1-array.h"
> >
> > #define FOREACH_MSG_ID(FUNC) \
> > /* fatal errors */ \
> > @@ -56,7 +57,9 @@
> > FUNC(ZERO_PADDED_FILEMODE) \
> > /* infos (reported as warnings, but ignored by default) */ \
> > FUNC(INVALID_TAG_NAME) \
> > - FUNC(MISSING_TAGGER_ENTRY)
> > + FUNC(MISSING_TAGGER_ENTRY) \
> > + /* special value */ \
> > + FUNC(SKIP_LIST)
>
> This feels like a kludge to me without comment on what "special
> value" means. Does it mean "this object has an error (which by
> default is ignored) of being on the skip list?" Should we be able
> to optionally warn an object on the skip-list exists with the same
> mechansim the rest of the series uses to tweak the error level?I addressed both concerns – I hope... ;-)
Ciao, Dscho