From: Eric Wong <e@80x24.org>
To: Jeff King <peff@peff.net>
Cc: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Janos Farkas" <chexum@gmail.com>,
git@vger.kernel.org
Subject: Re: 2.22.0 repack -a duplicating pack contents
Date: Sun, 23 Jun 2019 18:08:25 +0000 [thread overview]
Message-ID: <20190623180825.3ospajjgat3clwiu@dcvr> (raw)
In-Reply-To: <20190623180226.GA1100@sigill.intra.peff.net>
Jeff King <peff@peff.net> wrote:
> On Sun, Jun 23, 2019 at 04:54:50PM +0200, Ævar Arnfjörð Bjarmason wrote:
>
> > I haven't looked at this for more than a couple of minutes (and don't
> > have more time now), but this is almost certainly due to 36eba0323d
> > ("repack: enable bitmaps by default on bare repos", 2019-03-14). Can you
> > confirm when you re-run with repack.writeBitmaps=false in the config?
> >
> > I.e. something in the "yes I want bitmaps" code implies "*.keep"
> > semantics changing from "keep" to "replace", which is obvious in
> > retrospect, since we can only have one *.bitmap per-repo.
>
> Yeah, the .keep behavior with bitmaps is intended, though it means a
> funny implication for the bitmap-by-default strategy.
>
> Basically, you never want to have .keep files if you have bitmaps turned
> on, and so the default for "respect .keeps" is based on whether bitmaps
> are in use. See ee34a2bead (repack: add `repack.packKeptObjects` config
> var, 2014-03-03).
>
> I'm not sure of the right solution. For maximal backwards-compatibility,
> the default for bitmaps could become "if not bare and if there are no
> .keep files". But that would mean bitmaps sometimes not getting
> generated because of the problems that ee34a2bead was trying to solve.
>
> That's probably OK, though; you can always flip the bitmap config to
> "true" yourself if you _must_ have bitmaps.
What about something like this? Needs tests but I need to leave, now.
diff --git a/builtin/repack.c b/builtin/repack.c
index caca113927..1d99fb449b 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -89,6 +89,25 @@ static void remove_pack_on_signal(int signo)
raise(signo);
}
+static int has_pack_keep_file(void)
+{
+ DIR *dir;
+ struct dirent *e;
+ int found = 0;
+
+ if (!(dir = opendir(packdir)))
+ return found;
+
+ while ((e = readdir(dir)) != NULL) {
+ if (ends_with(e->d_name, ".keep")) {
+ found = 1;
+ break;
+ }
+ }
+ closedir(dir);
+ return found;
+}
+
/*
* Adds all packs hex strings to the fname list, which do not
* have a corresponding .keep file. These packs are not to
@@ -343,16 +362,20 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
(unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
die(_("--keep-unreachable and -A are incompatible"));
- if (write_bitmaps < 0)
+ packdir = mkpathdup("%s/pack", get_object_directory());
+
+ if (write_bitmaps < 0) {
write_bitmaps = (pack_everything & ALL_INTO_ONE) &&
- is_bare_repository();
+ is_bare_repository() &&
+ keep_pack_list.nr == 0 &&
+ !has_pack_keep_file();
+ }
if (pack_kept_objects < 0)
pack_kept_objects = write_bitmaps;
if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
die(_(incremental_bitmap_conflict_error));
- packdir = mkpathdup("%s/pack", get_object_directory());
packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
sigchain_push_common(remove_pack_on_signal);
next prev parent reply other threads:[~2019-06-23 18:08 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-23 12:15 2.22.0 repack -a duplicating pack contents Janos Farkas
2019-06-23 14:54 ` Ævar Arnfjörð Bjarmason
2019-06-23 15:38 ` Janos Farkas
2019-06-23 18:02 ` Jeff King
2019-06-23 18:08 ` Eric Wong [this message]
2019-06-23 22:42 ` Jeff King
2019-06-24 9:30 ` Ævar Arnfjörð Bjarmason
2019-07-03 17:40 ` Jeff King
2019-06-28 7:02 ` [PATCH] repack: disable bitmaps-by-default if .keep files exist Eric Wong
2019-06-28 7:21 ` Ævar Arnfjörð Bjarmason
2019-06-29 19:16 ` [PATCH 2/1] repack: warn if bitmaps are explicitly enabled with keep files Eric Wong
2019-07-01 18:15 ` Junio C Hamano
2019-07-03 17:38 ` Jeff King
2019-07-03 18:10 ` Junio C Hamano
2019-07-03 18:37 ` Junio C Hamano
2019-07-03 21:24 ` Jeff King
2019-07-03 21:23 ` Jeff King
2019-07-08 17:40 ` Junio C Hamano
2019-06-29 8:03 ` [PATCH] repack: disable bitmaps-by-default if .keep files exist SZEDER Gábor
2019-06-29 19:13 ` [PATCH v2] " Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190623180825.3ospajjgat3clwiu@dcvr \
--to=e@80x24.org \
--cc=avarab@gmail.com \
--cc=chexum@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).