From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH] add: add --bulk to index all objects into a pack file
Date: Thu, 3 Oct 2013 11:00:11 +0700 [thread overview]
Message-ID: <1380772811-15415-1-git-send-email-pclouds@gmail.com> (raw)
The use case is
tar -xzf bigproject.tar.gz
cd bigproject
git init
git add .
# git grep or something
The first add will generate a bunch of loose objects. With --bulk, all
of them are forced into a single pack instead, less clutter on disk
and maybe faster object access.
This is the equivalent of "git -c core.bigFileThreshold=0 add ." so
it's not really a new functionality. Just some convenient and public
exposure.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Interestingly index_stream() seems a bit slower than standard
index_core(). Perhaps mmap() is faster than a series of read() for
small files. Room for improvement later.
Documentation/git-add.txt | 6 ++++++
builtin/add.c | 10 +++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 48754cb..36a77f6 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -160,6 +160,12 @@ today's "git add <pathspec>...", ignoring removed files.
be ignored, no matter if they are already present in the work
tree or not.
+--bulk::
+ Normally new objects are indexed and stored in loose format,
+ one file per new object in "$GIT_DIR/objects". This option
+ forces putting all objects into a single new pack. This may
+ be useful when you need to add a lot of files initially.
+
\--::
This option can be used to separate command-line options from
the list of files, (useful when filenames might be mistaken
diff --git a/builtin/add.c b/builtin/add.c
index 226f758..40cbb71 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -336,7 +336,7 @@ static struct lock_file lock_file;
static const char ignore_error[] =
N_("The following paths are ignored by one of your .gitignore files:\n");
-static int verbose, show_only, ignored_too, refresh_only;
+static int verbose, show_only, ignored_too, refresh_only, bulk_index;
static int ignore_add_errors, intent_to_add, ignore_missing;
#define ADDREMOVE_DEFAULT 0 /* Change to 1 in Git 2.0 */
@@ -368,6 +368,7 @@ static struct option builtin_add_options[] = {
OPT_BOOL( 0 , "refresh", &refresh_only, N_("don't add, only refresh the index")),
OPT_BOOL( 0 , "ignore-errors", &ignore_add_errors, N_("just skip files which cannot be added because of errors")),
OPT_BOOL( 0 , "ignore-missing", &ignore_missing, N_("check if - even missing - files are ignored in dry run")),
+ OPT_BOOL( 0 , "bulk", &bulk_index, N_("pack all objects instead of creating loose ones")),
OPT_END(),
};
@@ -560,6 +561,13 @@ int cmd_add(int argc, const char **argv, const char *prefix)
free(seen);
}
+ if (bulk_index)
+ /*
+ * Pretend all blobs are "large" files, forcing them
+ * all into a pack
+ */
+ big_file_threshold = 0;
+
plug_bulk_checkin();
if ((flags & ADD_CACHE_IMPLICIT_DOT) && prefix) {
--
1.8.2.82.gc24b958
next reply other threads:[~2013-10-03 4:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-03 4:00 Nguyễn Thái Ngọc Duy [this message]
2013-10-03 6:43 ` [PATCH] add: add --bulk to index all objects into a pack file Junio C Hamano
2013-10-03 12:26 ` Duy Nguyen
2013-10-04 6:57 ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2013-10-04 7:10 ` Matthieu Moy
2013-10-04 7:19 ` Duy Nguyen
2013-10-04 12:38 ` Duy Nguyen
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1380772811-15415-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.