[PATCH v6+ 0/7] js/scalar-diagnose rebased
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 28, 2022, 23:11 UTC
- Message-ID
- <20220528231118.3504387-1-gitster@pobox.com>
- In-Reply-To
- <pull.1128.v6.git.1653145696.gitgitgadget@gmail.com>
Recent document clarification on the "--prefix" option of the "git archive" command from René serves as a good basis for the documentation of the "--add-virtual-file" option added by this series, so here is my attempt to rebase js/scalar-diagnose topic on it to hopefully help reduce Dscho's workload ;-)
Aside from obvious adjustments needed while rebasing onto the updated documentation, there are only a couple of changes:
- The way the <path> in --add-virtual-file=<path>:<contents> is used has been corrected. Earlier, leading directory components of the <path> were all discarded and used nowhere, which made no sense. The <path> is used as a whole, but for consistency with --add-file=<path>, <prefix> is still applied.
- Overly loose quoting of variables in test scripts has been corrected.
Both changes have been in 'seen' from before the rebase.
1: 510f6b226b ! 1: 61522a0866 archive: optionally add "virtual" files
@@ Commit message
## Documentation/git-archive.txt ##
@@ Documentation/git-archive.txt: OPTIONS
- by concatenating the value for `--prefix` (if any) and the
- basename of <file>.
+ --prefix=<prefix>/::
+ Prepend <prefix>/ to paths in the archive. Can be repeated; its
+ rightmost value is used for all tracked files. See below which
+- value gets used by `--add-file`.
++ value gets used by `--add-file` and `--add-virtual-file`.
+
+ -o <file>::
+ --output=<file>::
+@@ Documentation/git-archive.txt: OPTIONS
+ concatenating the value of the last `--prefix` option (if any)
+ before this `--add-file` and the basename of <file>.
+--add-virtual-file=<path>:<content>::
+ Add the specified contents to the archive. Can be repeated to add
+ multiple files. The path of the file in the archive is built
-+ by concatenating the value for `--prefix` (if any) and the
-+ basename of <file>.
++ by concatenating the value of the last `--prefix` option (if any)
++ before this `--add-virtual-file` and `<path>`.
++
+The `<path>` cannot contain any colon, the file mode is limited to
+a regular file, and the option may be subject to platform-dependent
@@ archive.c: static int queue_or_write_archive_entry(const struct object_id *oid,
int write_archive_entries(struct archiver_args *args,
@@ archive.c: int write_archive_entries(struct archiver_args *args,
- strbuf_addstr(&path_in_archive, basename(path));
- strbuf_reset(&content);
+ put_be64(fake_oid.hash, i + 1);
+
+- strbuf_reset(&path_in_archive);
+- if (info->base)
+- strbuf_addstr(&path_in_archive, info->base);
+- strbuf_addstr(&path_in_archive, basename(path));
+-
+- strbuf_reset(&content);
- if (strbuf_read_file(&content, path, info->stat.st_size) < 0)
-+ if (info->content)
-+ err = write_entry(args, &fake_oid, path_in_archive.buf,
-+ path_in_archive.len,
-+ canon_mode(info->stat.st_mode),
+- err = error_errno(_("cannot read '%s'"), path);
+- else
+- err = write_entry(args, &fake_oid, path_in_archive.buf,
+- path_in_archive.len,
++ if (!info->content) {
++ strbuf_reset(&path_in_archive);
++ if (info->base)
++ strbuf_addstr(&path_in_archive, info->base);
++ strbuf_addstr(&path_in_archive, basename(path));
++
++ strbuf_reset(&content);
++ if (strbuf_read_file(&content, path, info->stat.st_size) < 0)
++ err = error_errno(_("could not read '%s'"), path);
++ else
++ err = write_entry(args, &fake_oid, path_in_archive.buf,
++ path_in_archive.len,
++ canon_mode(info->stat.st_mode),
++ content.buf, content.len);
++ } else {
++ err = write_entry(args, &fake_oid,
++ path, strlen(path),
+ canon_mode(info->stat.st_mode),
+- content.buf, content.len);
+ info->content, info->stat.st_size);
-+ else if (strbuf_read_file(&content, path,
-+ info->stat.st_size) < 0)
- err = error_errno(_("cannot read '%s'"), path);
- else
- err = write_entry(args, &fake_oid, path_in_archive.buf,
++ }
++
+ if (err)
+ break;
+ }
@@ archive.c: static void extra_file_info_clear(void *util, const char *str)
{
struct extra_file_info *info = util;
2: 208f4aad5f ! 2: 5e9d19a70f archive --add-virtual-file: allow paths containing colons
@@ Commit message
## Documentation/git-archive.txt ##
@@ Documentation/git-archive.txt: OPTIONS
- by concatenating the value for `--prefix` (if any) and the
- basename of <file>.
+ by concatenating the value of the last `--prefix` option (if any)
+ before this `--add-virtual-file` and `<path>`.
+
-The `<path>` cannot contain any colon, the file mode is limited to
-a regular file, and the option may be subject to platform-dependent
-command-line limits. For non-trivial cases, write an untracked file
-and use `--add-file` instead.
+The `<path>` argument can start and end with a literal double-quote
-+character; The contained file name is interpreted as a C-style string,
++character; the contained file name is interpreted as a C-style string,
+i.e. the backslash is interpreted as escape character. The path must
+be quoted if it contains a colon, to avoid the colon from being
+misinterpreted as the separator between the path and the contents, or
@@ t/t5003-archive-zip.sh: check_zip with_untracked
test_expect_success UNZIP 'git archive --format=zip --add-virtual-file' '
+ if test_have_prereq FUNNYNAMES
+ then
-+ PATHNAME=quoted:colon
++ PATHNAME="pathname with : colon"
+ else
-+ PATHNAME=quoted
++ PATHNAME="pathname without colon"
+ fi &&
git archive --format=zip >with_file_with_content.zip \
-+ --add-virtual-file=\"$PATHNAME\": \
++ --add-virtual-file=\""$PATHNAME"\": \
--add-virtual-file=hello:world $EMPTY_TREE &&
test_when_finished "rm -rf tmp-unpack" &&
mkdir tmp-unpack && (
cd tmp-unpack &&
"$GIT_UNZIP" ../with_file_with_content.zip &&
test_path_is_file hello &&
-+ test_path_is_file $PATHNAME &&
++ test_path_is_file "$PATHNAME" &&
test world = $(cat hello)
)
'
3: bc1164404f = 3: 4f5b3aa775 scalar: validate the optional enlistment argument
4: 69daeb7d9d ! 4: f4f070df8e Implement `scalar diagnose`
@@ Metadata
Author: Johannes Schindelin <Johannes.Schindelin@gmx.de>
## Commit message ##
- Implement `scalar diagnose`
+ scalar: implement `scalar diagnose`
Over the course of Scalar's development, it became obvious that there is
a need for a command that can gather all kinds of useful information
5: 5c1ef19524 = 5: 0417d8abe4 scalar diagnose: include disk space information
6: 0325b9c3ab = 6: 5531b65ddb scalar: teach `diagnose` to gather packfile info
7: 8fee365b07 = 7: ce9eba5e32 scalar: teach `diagnose` to gather loose objects information