98cdfbb | Junio C Hamano | 21 November 2018, 14:22:12 UTC | Git 2.19.2 Signed-off-by: Junio C Hamano <gitster@pobox.com> | 21 November 2018, 14:22:12 UTC |
a4830a7 | Junio C Hamano | 21 November 2018, 13:58:10 UTC | Merge branch 'sg/test-rebase-editor-fix' into maint * sg/test-rebase-editor-fix: t3404-rebase-interactive: test abbreviated commands | 21 November 2018, 13:58:10 UTC |
85eb0f1 | Junio C Hamano | 21 November 2018, 13:58:09 UTC | Merge branch 'tb/char-may-be-unsigned' into maint Build portability fix. * tb/char-may-be-unsigned: path.c: char is not (always) signed | 21 November 2018, 13:58:09 UTC |
2b15340 | Junio C Hamano | 21 November 2018, 13:58:08 UTC | Merge branch 'jk/uploadpack-packobjectshook-fix' into maint Code clean-up that results in a small bugfix. * jk/uploadpack-packobjectshook-fix: upload-pack: fix broken if/else chain in config callback | 21 November 2018, 13:58:09 UTC |
227124b | Junio C Hamano | 21 November 2018, 13:58:08 UTC | Merge branch 'uk/merge-subtree-doc-update' into maint Belated documentation update to adjust to a new world order that happened a yew years ago. * uk/merge-subtree-doc-update: howto/using-merge-subtree: mention --allow-unrelated-histories | 21 November 2018, 13:58:08 UTC |
196afc4 | Junio C Hamano | 21 November 2018, 13:58:08 UTC | Merge branch 'jc/cocci-preincr' into maint Code cleanup. * jc/cocci-preincr: fsck: s/++i > 1/i++/ cocci: simplify "if (++u > 1)" to "if (u++)" | 21 November 2018, 13:58:08 UTC |
eba1416 | Junio C Hamano | 21 November 2018, 13:58:07 UTC | Merge branch 'ah/doc-updates' into maint Doc updates. * ah/doc-updates: doc: fix formatting in git-update-ref doc: fix indentation of listing blocks in gitweb.conf.txt doc: fix descripion for 'git tag --format' doc: fix inappropriate monospace formatting doc: fix ASCII art tab spacing doc: clarify boundaries of 'git worktree list --porcelain' | 21 November 2018, 13:58:07 UTC |
b53df43 | Junio C Hamano | 21 November 2018, 13:58:07 UTC | Merge branch 'sg/doc-show-branch-typofix' into maint Docfix. * sg/doc-show-branch-typofix: doc: fix small typo in git show-branch | 21 November 2018, 13:58:07 UTC |
69ae666 | Junio C Hamano | 21 November 2018, 13:58:06 UTC | Merge branch 'tq/branch-style-fix' into maint Code clean-up. * tq/branch-style-fix: branch: trivial style fix | 21 November 2018, 13:58:06 UTC |
2b40fdd | Junio C Hamano | 21 November 2018, 13:58:06 UTC | Merge branch 'tq/branch-create-wo-branch-get' into maint Code clean-up. * tq/branch-create-wo-branch-get: builtin/branch.c: remove useless branch_get | 21 November 2018, 13:58:06 UTC |
c2d6378 | Junio C Hamano | 21 November 2018, 13:58:06 UTC | Merge branch 'sb/strbuf-h-update' into maint Code clean-up to serve as a BCP example. Further clean-up patches may want to follow soon. * sb/strbuf-h-update: strbuf.h: format according to coding guidelines | 21 November 2018, 13:58:06 UTC |
a6dc172 | Junio C Hamano | 21 November 2018, 13:58:05 UTC | Merge branch 'du/cherry-is-plumbing' into maint Doc update to mark "git cherry" as a plumbing command. * du/cherry-is-plumbing: doc: move git-cherry to plumbing | 21 November 2018, 13:58:05 UTC |
c3ba2ae | Junio C Hamano | 21 November 2018, 13:58:05 UTC | Merge branch 'du/get-tar-commit-id-is-plumbing' into maint Doc update to mark "git get-tar-commit-id" as a plumbing command. * du/get-tar-commit-id-is-plumbing: doc: move git-get-tar-commit-id to plumbing | 21 November 2018, 13:58:05 UTC |
53016f4 | Junio C Hamano | 21 November 2018, 13:58:04 UTC | Merge branch 'mm/doc-no-dashed-git' into maint Doc update. * mm/doc-no-dashed-git: doc: fix a typo and clarify a sentence | 21 November 2018, 13:58:05 UTC |
95500c8 | Junio C Hamano | 21 November 2018, 13:58:04 UTC | Merge branch 'du/rev-parse-is-plumbing' into maint Doc update. * du/rev-parse-is-plumbing: doc: move git-rev-parse from porcelain to plumbing | 21 November 2018, 13:58:04 UTC |
6262f5c | Junio C Hamano | 21 November 2018, 13:58:04 UTC | Merge branch 'ma/t7005-bash-workaround' into maint Test fix. * ma/t7005-bash-workaround: t7005-editor: quote filename to fix whitespace-issue | 21 November 2018, 13:58:04 UTC |
6b57374 | Junio C Hamano | 21 November 2018, 13:58:03 UTC | Merge branch 'jc/how-to-document-api' into maint Doc update. * jc/how-to-document-api: CodingGuidelines: document the API in *.h files | 21 November 2018, 13:58:03 UTC |
368ba6b | Junio C Hamano | 21 November 2018, 13:58:03 UTC | Merge branch 'mw/doc-typofixes' into maint Typofixes. * mw/doc-typofixes: docs: typo: s/isimilar/similar/ docs: graph: remove unnecessary `graph_update()' call docs: typo: s/go/to/ | 21 November 2018, 13:58:03 UTC |
587b3f5 | Junio C Hamano | 21 November 2018, 13:58:02 UTC | Merge branch 'rs/sequencer-oidset-insert-avoids-dups' into maint Code clean-up. * rs/sequencer-oidset-insert-avoids-dups: sequencer: use return value of oidset_insert() | 21 November 2018, 13:58:02 UTC |
1713093 | Junio C Hamano | 21 November 2018, 13:58:02 UTC | Merge branch 'ma/mailing-list-address-in-git-help' into maint Doc update. * ma/mailing-list-address-in-git-help: git doc: direct bug reporters to mailing list archive | 21 November 2018, 13:58:02 UTC |
060d061 | Junio C Hamano | 21 November 2018, 13:58:01 UTC | Merge branch 'nd/packobjectshook-doc-fix' into maint Doc update. * nd/packobjectshook-doc-fix: config.txt: correct the note about uploadpack.packObjectsHook | 21 November 2018, 13:58:01 UTC |
6f1c815 | Junio C Hamano | 21 November 2018, 13:58:01 UTC | Merge branch 'ma/t1400-undebug-test' into maint Test fix. * ma/t1400-undebug-test: t1400: drop debug `echo` to actually execute `test` | 21 November 2018, 13:58:01 UTC |
35e54ea | Junio C Hamano | 21 November 2018, 13:58:00 UTC | Merge branch 'ma/commit-graph-docs' into maint Doc update. * ma/commit-graph-docs: Doc: refer to the "commit-graph file" with dash git-commit-graph.txt: refer to "*commit*-graph file" git-commit-graph.txt: typeset more in monospace git-commit-graph.txt: fix bullet lists | 21 November 2018, 13:58:00 UTC |
871955c | Junio C Hamano | 21 November 2018, 13:58:00 UTC | Merge branch 'dz/credential-doc-url-matching-rules' into maint Doc update. * dz/credential-doc-url-matching-rules: doc: clarify gitcredentials path component matching | 21 November 2018, 13:58:00 UTC |
75266b4 | Junio C Hamano | 21 November 2018, 13:57:59 UTC | Merge branch 'jk/check-everything-connected-is-long-gone' into maint Comment fix. * jk/check-everything-connected-is-long-gone: receive-pack: update comment with check_everything_connected | 21 November 2018, 13:58:00 UTC |
0caea62 | Junio C Hamano | 21 November 2018, 13:57:58 UTC | Merge branch 'fe/doc-updates' into maint Doc updates. * fe/doc-updates: git-describe.1: clarify that "human readable" is also git-readable git-column.1: clarify initial description, provide examples git-archimport.1: specify what kind of Arch we're talking about | 21 November 2018, 13:57:58 UTC |
2a98f6c | Junio C Hamano | 21 November 2018, 13:57:58 UTC | Merge branch 'tg/t5551-with-curl-7.61.1' into maint Test update. Supersedes tz/t5551-with-curl-7.61.1 topic * tg/t5551-with-curl-7.61.1: t5551: compare sorted cookies files t5551: move setup code inside test_expect blocks | 21 November 2018, 13:57:58 UTC |
a753373 | Junio C Hamano | 21 November 2018, 13:57:58 UTC | Merge branch 'tq/refs-internal-comment-fix' into maint Fix for typo in a sample code in comment. * tq/refs-internal-comment-fix: refs: docstring typo | 21 November 2018, 13:57:58 UTC |
85f6afc | Junio C Hamano | 21 November 2018, 13:57:57 UTC | Merge branch 'sg/split-index-test' into maint Test updates. * sg/split-index-test: t0090: disable GIT_TEST_SPLIT_INDEX for the test checking split index t1700-split-index: drop unnecessary 'grep' | 21 November 2018, 13:57:57 UTC |
3ae0ac6 | Junio C Hamano | 21 November 2018, 13:57:57 UTC | Merge branch 'bw/protocol-v2' into maint Doc fix. * bw/protocol-v2: config: document value 2 for protocol.version | 21 November 2018, 13:57:57 UTC |
d5e4cba | Junio C Hamano | 21 November 2018, 13:57:56 UTC | Merge branch 'sb/string-list-remove-unused' into maint Code clean-up. * sb/string-list-remove-unused: string-list: remove unused function print_string_list | 21 November 2018, 13:57:56 UTC |
d9e70a4 | Junio C Hamano | 21 November 2018, 13:57:56 UTC | Merge branch 'jk/dev-build-format-security' into maint Build tweak to help developers. * jk/dev-build-format-security: config.mak.dev: add -Wformat-security | 21 November 2018, 13:57:56 UTC |
9beaf81 | Junio C Hamano | 21 November 2018, 13:57:55 UTC | Merge branch 'sg/t3701-tighten-trace' into maint Test update. * sg/t3701-tighten-trace: t3701-add-interactive: tighten the check of trace output | 21 November 2018, 13:57:55 UTC |
ab6409c | Junio C Hamano | 21 November 2018, 13:57:54 UTC | Merge branch 'en/double-semicolon-fix' into maint Code clean-up. * en/double-semicolon-fix: Remove superfluous trailing semicolons | 21 November 2018, 13:57:55 UTC |
761868b | Junio C Hamano | 21 November 2018, 13:57:54 UTC | Merge branch 'tb/void-check-attr' into maint Code clean-up. * tb/void-check-attr: Make git_check_attr() a void function | 21 November 2018, 13:57:54 UTC |
04b9bdb | Junio C Hamano | 21 November 2018, 13:57:54 UTC | Merge branch 'sg/doc-trace-appends' into maint Docfix. * sg/doc-trace-appends: Documentation/git.txt: clarify that GIT_TRACE=/path appends | 21 November 2018, 13:57:54 UTC |
04d70dd | Junio C Hamano | 21 November 2018, 13:57:53 UTC | Merge branch 'tg/conflict-marker-size' into maint Developer aid. * tg/conflict-marker-size: .gitattributes: add conflict-marker-size for relevant files | 21 November 2018, 13:57:53 UTC |
7532a18 | Junio C Hamano | 21 November 2018, 13:57:53 UTC | Merge branch 'ts/doc-build-manpage-xsl-quietly' into maint Build tweak. * ts/doc-build-manpage-xsl-quietly: Documentation/Makefile: make manpage-base-url.xsl generation quieter | 21 November 2018, 13:57:53 UTC |
d75c41b | Junio C Hamano | 21 November 2018, 13:57:52 UTC | Merge branch 'jk/detect-truncated-zlib-input' into maint A regression in Git 2.12 era made "git fsck" fall into an infinite loop while processing truncated loose objects. * jk/detect-truncated-zlib-input: cat-file: handle streaming failures consistently check_stream_sha1(): handle input underflow t1450: check large blob in trailing-garbage test | 21 November 2018, 13:57:52 UTC |
0e57d28 | Junio C Hamano | 21 November 2018, 13:57:52 UTC | Merge branch 'sg/test-verbose-log' into maint Our test scripts can now take the '-V' option as a synonym for the '--verbose-log' option. * sg/test-verbose-log: test-lib: introduce the '-V' short option for '--verbose-log' | 21 November 2018, 13:57:52 UTC |
a1601a5 | Junio C Hamano | 21 November 2018, 13:57:52 UTC | Merge branch 'ss/travis-ci-force-vm-mode' into maint The "container" mode of TravisCI is going away. Our .travis.yml file is getting prepared for the transition. * ss/travis-ci-force-vm-mode: travis-ci: no longer use containers | 21 November 2018, 13:57:52 UTC |
b52ac60 | Junio C Hamano | 21 November 2018, 13:57:52 UTC | Merge branch 'md/exclude-promisor-objects-fix' into maint Operations on promisor objects make sense in the context of only a small subset of the commands that internally use the revisions machinery, but the "--exclude-promisor-objects" option were taken and led to nonsense results by commands like "log", to which it didn't make much sense. This has been corrected. * md/exclude-promisor-objects-fix: exclude-promisor-objects: declare when option is allowed Documentation/git-log.txt: do not show --exclude-promisor-objects | 21 November 2018, 13:57:52 UTC |
d0975a0 | Junio C Hamano | 21 November 2018, 13:57:51 UTC | Merge branch 'js/shallow-and-fetch-prune' into maint "git repack" in a shallow clone did not correctly update the shallow points in the repository, leading to a repository that does not pass fsck. * js/shallow-and-fetch-prune: repack -ad: prune the list of shallow commits shallow: offer to prune only non-existing entries repack: point out a bug handling stale shallow info | 21 November 2018, 13:57:51 UTC |
7d483e9 | Junio C Hamano | 21 November 2018, 13:57:51 UTC | Merge branch 'jc/receive-deny-current-branch-fix' into maint The receive.denyCurrentBranch=updateInstead codepath kicked in even when the push should have been rejected due to other reasons, such as it does not fast-forward or the update-hook rejects it, which has been corrected. * jc/receive-deny-current-branch-fix: receive: denyCurrentBranch=updateinstead should not blindly update | 21 November 2018, 13:57:51 UTC |
45dda3a | Junio C Hamano | 21 November 2018, 13:57:50 UTC | Merge branch 'js/diff-notice-has-drive-prefix' into maint Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on Windows would strip initial parts from the paths because they were not recognized as absolute, which has been corrected. * js/diff-notice-has-drive-prefix: diff: don't attempt to strip prefix from absolute Windows paths | 21 November 2018, 13:57:51 UTC |
e3c18aa | Junio C Hamano | 21 November 2018, 13:57:50 UTC | Merge branch 'js/pack-objects-mutex-init-fix' into maint A mutex used in "git pack-objects" were not correctly initialized and this caused "git repack" to dump core on Windows. * js/pack-objects-mutex-init-fix: pack-objects (mingw): initialize `packing_data` mutex in the correct spot pack-objects (mingw): demonstrate a segmentation fault with large deltas pack-objects: fix typo 'detla' -> 'delta' | 21 November 2018, 13:57:50 UTC |
1bf5d99 | Junio C Hamano | 21 November 2018, 13:57:50 UTC | Merge branch 'jk/run-command-notdot' into maint The implementation of run_command() API on the UNIX platforms had a bug that caused a command not on $PATH to be found in the current directory. * jk/run-command-notdot: run-command: mark path lookup errors with ENOENT | 21 November 2018, 13:57:50 UTC |
a51c638 | Junio C Hamano | 21 November 2018, 13:57:49 UTC | Merge branch 'np/log-graph-octopus-fix' into maint "git log --graph" showing an octopus merge sometimes miscounted the number of display columns it is consuming to show the merge and its parent commits, which has been corrected. * np/log-graph-octopus-fix: log: fix coloring of certain octopus merge shapes | 21 November 2018, 13:57:49 UTC |
3f0c460 | Junio C Hamano | 21 November 2018, 13:57:48 UTC | Merge branch 'sg/split-index-racefix' into maint The codepath to support the experimental split-index mode had remaining "racily clean" issues fixed. * sg/split-index-racefix: split-index: BUG() when cache entry refers to non-existing shared entry split-index: smudge and add racily clean cache entries to split index split-index: don't compare cached data of entries already marked for split index split-index: count the number of deleted entries t1700-split-index: date back files to avoid racy situations split-index: add tests to demonstrate the racy split index problem t1700-split-index: document why FSMONITOR is disabled in this test script | 21 November 2018, 13:57:48 UTC |
0811737 | Junio C Hamano | 21 November 2018, 13:57:48 UTC | Merge branch 'jt/non-blob-lazy-fetch' into maint A partial clone that is configured to lazily fetch missing objects will on-demand issue a "git fetch" request to the originating repository to fill not-yet-obtained objects. The request has been optimized for requesting a tree object (and not the leaf blob objects contained in it) by telling the originating repository that no blobs are needed. * jt/non-blob-lazy-fetch: fetch-pack: exclude blobs when lazy-fetching trees fetch-pack: avoid object flags if no_dependents | 21 November 2018, 13:57:48 UTC |
9674e7a | Junio C Hamano | 21 November 2018, 13:57:48 UTC | Merge branch 'sm/show-superproject-while-conflicted' into maint A corner-case bugfix. * sm/show-superproject-while-conflicted: rev-parse: --show-superproject-working-tree should work during a merge | 21 November 2018, 13:57:48 UTC |
254db30 | Junio C Hamano | 21 November 2018, 13:57:48 UTC | Merge branch 'en/status-multiple-renames-to-the-same-target-fix' into maint The code in "git status" sometimes hit an assertion failure. This was caused by a structure that was reused without cleaning the data used for the first run, which has been corrected. * en/status-multiple-renames-to-the-same-target-fix: commit: fix erroneous BUG, 'multiple renames on the same target? how?' | 21 November 2018, 13:57:48 UTC |
f1814e0 | Junio C Hamano | 21 November 2018, 13:57:47 UTC | Merge branch 'jn/mailmap-update' into maint The mailmap file update. * jn/mailmap-update: mailmap: consistently normalize brian m. carlson's name | 21 November 2018, 13:57:47 UTC |
e60e38a | Junio C Hamano | 21 November 2018, 13:57:47 UTC | Merge branch 'ds/commit-graph-with-grafts' into maint The recently introduced commit-graph auxiliary data is incompatible with mechanisms such as replace & grafts that "breaks" immutable nature of the object reference relationship. Disable optimizations based on its use (and updating existing commit-graph) when these incompatible features are in use in the repository. * ds/commit-graph-with-grafts: commit-graph: close_commit_graph before shallow walk commit-graph: not compatible with uninitialized repo commit-graph: not compatible with grafts commit-graph: not compatible with replace objects test-repository: properly init repo commit-graph: update design document refs.c: upgrade for_each_replace_ref to be a each_repo_ref_fn callback refs.c: migrate internal ref iteration to pass thru repository argument | 21 November 2018, 13:57:47 UTC |
a357dae | Junio C Hamano | 21 November 2018, 13:57:46 UTC | Merge branch 'tg/range-diff-corner-case-fix' into maint Recently added "range-diff" had a corner-case bug to cause it segfault, which has been corrected. * tg/range-diff-corner-case-fix: linear-assignment: fix potential out of bounds memory access | 21 November 2018, 13:57:46 UTC |
50e6df2 | Junio C Hamano | 21 November 2018, 13:57:46 UTC | Merge branch 'en/update-ref-no-deref-stdin' into maint "git update-ref" learned to make both "--no-deref" and "--stdin" work at the same time. * en/update-ref-no-deref-stdin: update-ref: allow --no-deref with --stdin update-ref: fix type of update_flags variable to match its usage | 21 November 2018, 13:57:46 UTC |
1fae869 | Junio C Hamano | 21 November 2018, 13:57:46 UTC | Merge branch 'ms/remote-error-message-update' into maint Update error messages given by "git remote" and make them consistent. * ms/remote-error-message-update: builtin/remote: quote remote name on error to display empty name | 21 November 2018, 13:57:46 UTC |
2e168d7 | Junio C Hamano | 21 November 2018, 13:57:45 UTC | Merge branch 'jt/lazy-object-fetch-fix' into maint The code to backfill objects in lazily cloned repository did not work correctly, which has been corrected. * jt/lazy-object-fetch-fix: fetch-object: set exact_oid when fetching fetch-object: unify fetch_object[s] functions | 21 November 2018, 13:57:46 UTC |
8ecf0c8 | Junio C Hamano | 21 November 2018, 13:57:45 UTC | Merge branch 'en/sequencer-empty-edit-result-aborts' into maint "git rebase" etc. in Git 2.19 fails to abort when given an empty commit log message as result of editing, which has been corrected. * en/sequencer-empty-edit-result-aborts: sequencer: fix --allow-empty-message behavior, make it smarter | 21 November 2018, 13:57:45 UTC |
ca211f9 | Junio C Hamano | 21 November 2018, 13:57:45 UTC | Merge branch 'nd/attr-pathspec-fix' into maint "git add ':(attr:foo)'" is not supported and is supposed to be rejected while the command line arguments are parsed, but we fail to reject such a command line upfront. * nd/attr-pathspec-fix: add: do not accept pathspec magic 'attr' | 21 November 2018, 13:57:45 UTC |
b4eafbc | Junio C Hamano | 21 November 2018, 13:57:44 UTC | Merge branch 'en/rerere-multi-stage-1-fix' into maint A corner case bugfix in "git rerere" code. * en/rerere-multi-stage-1-fix: rerere: avoid buffer overrun t4200: demonstrate rerere segfault on specially crafted merge | 21 November 2018, 13:57:44 UTC |
e1372c3 | Junio C Hamano | 21 November 2018, 13:57:44 UTC | Merge branch 'js/mingw-o-append' into maint Further fix for O_APPEND emulation on Windows * js/mingw-o-append: mingw: fix mingw_open_append to work with named pipes t0051: test GIT_TRACE to a windows named pipe | 21 November 2018, 13:57:44 UTC |
604f719 | Junio C Hamano | 21 November 2018, 13:57:43 UTC | Merge branch 'jk/reopen-tempfile-truncate' into maint Fix for a long-standing bug that leaves the index file corrupt when it shrinks during a partial commit. * jk/reopen-tempfile-truncate: reopen_tempfile(): truncate opened file | 21 November 2018, 13:57:43 UTC |
07c5a1b | Junio C Hamano | 21 November 2018, 13:57:43 UTC | Merge branch 'bp/mv-submodules-with-fsmonitor' into maint When fsmonitor is in use, after operation on submodules updates .gitmodules, we lost track of the fact that we did so and relied on stale fsmonitor data. * bp/mv-submodules-with-fsmonitor: git-mv: allow submodules and fsmonitor to work together | 21 November 2018, 13:57:43 UTC |
ff92463 | Junio C Hamano | 21 November 2018, 13:57:42 UTC | Merge branch 'js/rebase-i-autosquash-fix' into maint "git rebase -i" did not clear the state files correctly when a run of "squash/fixup" is aborted and then the user manually amended the commit instead, which has been corrected. * js/rebase-i-autosquash-fix: rebase -i: be careful to wrap up fixup/squash chains rebase -i --autosquash: demonstrate a problem skipping the last squash | 21 November 2018, 13:57:42 UTC |
e293824 | Junio C Hamano | 21 November 2018, 13:57:41 UTC | Merge branch 'jk/trailer-fixes' into maint "git interpret-trailers" and its underlying machinery had a buggy code that attempted to ignore patch text after commit log message, which triggered in various codepaths that will always get the log message alone and never get such an input. * jk/trailer-fixes: append_signoff: use size_t for string offsets sequencer: ignore "---" divider when parsing trailers pretty, ref-filter: format %(trailers) with no_divider option interpret-trailers: allow suppressing "---" divider interpret-trailers: tighten check for "---" patch boundary trailer: pass process_trailer_opts to trailer_info_get() trailer: use size_t for iterating trailer list trailer: use size_t for string offsets | 21 November 2018, 13:57:42 UTC |
18ad13e | Junio C Hamano | 31 October 2018, 04:12:12 UTC | Adjust for 2.19.x series * jk/detect-truncated-zlib-input cat-file: handle streaming failures consistently check_stream_sha1(): handle input underflow t1450: check large blob in trailing-garbage test | 31 October 2018, 04:12:12 UTC |
98f425b | Jeff King | 30 October 2018, 23:23:38 UTC | cat-file: handle streaming failures consistently There are three ways to convince cat-file to stream a blob: - cat-file -p $blob - cat-file blob $blob - echo $batch | cat-file --batch In the first two, we simply exit with the error code of streaw_blob_to_fd(). That means that an error will cause us to exit with "-1" (which we try to avoid) without printing any kind of error message (which is confusing to the user). Instead, let's match the third case, which calls die() on an error. Unfortunately we cannot be more specific, as stream_blob_to_fd() does not tell us whether the problem was on reading (e.g., a corrupt object) or on writing (e.g., ENOSPC). That might be an opportunity for future work, but for now we will at least exit with a sane message and exit code. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 31 October 2018, 04:05:26 UTC |
ccdc481 | Jeff King | 30 October 2018, 23:23:12 UTC | check_stream_sha1(): handle input underflow This commit fixes an infinite loop when fscking large truncated loose objects. The check_stream_sha1() function takes an mmap'd loose object buffer and streams 4k of output at a time, checking its sha1. The loop quits when we've output enough bytes (we know the size from the object header), or when zlib tells us anything except Z_OK or Z_BUF_ERROR. The latter is expected because zlib may run out of room in our 4k buffer, and that is how it tells us to process the output and loop again. But Z_BUF_ERROR also covers another case: one in which zlib cannot make forward progress because it needs more _input_. This should never happen in this loop, because though we're streaming the output, we have the entire deflated input available in the mmap'd buffer. But since we don't check this case, we'll just loop infinitely if we do see a truncated object, thinking that zlib is asking for more output space. It's tempting to fix this by checking stream->avail_in as part of the loop condition (and quitting if all of our bytes have been consumed). But that assumes that once zlib has consumed the input, there is nothing left to do. That's not necessarily the case: it may have read our input into its internal state, but still have bytes to output. Instead, let's continue on Z_BUF_ERROR only when we see the case we're expecting: the previous round filled our output buffer completely. If it didn't (and we still saw Z_BUF_ERROR), we know something is wrong and should break out of the loop. The bug comes from commit f6371f9210 (sha1_file: add read_loose_object() function, 2017-01-13), which reimplemented some of the existing loose object functions. So it's worth checking if this bug was inherited from any of those. The answers seems to be no. The two obvious candidates are both OK: 1. unpack_sha1_rest(); this doesn't need to loop on Z_BUF_ERROR at all, since it allocates the expected output buffer in advance (which we can't do since we're explicitly streaming here) 2. check_object_signature(); the streaming path relies on the istream interface, which uses read_istream_loose() for this case. That function uses a similar "is our output buffer full" check with Z_BUF_ERROR (which is where I stole it from for this patch!) Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 31 October 2018, 04:05:26 UTC |
5632baf | Jeff King | 30 October 2018, 23:18:51 UTC | t1450: check large blob in trailing-garbage test Commit cce044df7f (fsck: detect trailing garbage in all object types, 2017-01-13) added two tests of trailing garbage in a loose object file: one with a commit and one with a blob. The point of having two is that blobs would follow a different code path that streamed the contents, instead of loading it into a buffer as usual. At the time, merely being a blob was enough to trigger the streaming code path. But since 7ac4f3a007 (fsck: actually fsck blob data, 2018-05-02), we now only stream blobs that are actually large. So since then, the streaming code path is not tested at all for this case. We can restore the original intent of the test by tweaking core.bigFileThreshold to make our small blob seem large. There's no easy way to externally verify that we followed the streaming code path, but I did check before/after using a temporary debug statement. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 31 October 2018, 03:53:44 UTC |
a5f52c6 | SZEDER Gábor | 29 October 2018, 12:13:59 UTC | test-lib: introduce the '-V' short option for '--verbose-log' '--verbose-log' is one of the most useful and thus most frequently used test options, but due to its length it's a pain to type on the command line. Let's introduce the corresponding short option '-V' to save some keystrokes. Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 30 October 2018, 02:06:54 UTC |
8c64bc9 | Johannes Sixt | 27 October 2018, 08:08:01 UTC | t3404-rebase-interactive: test abbreviated commands Make sure that each short command is tested at least once. To not exacerbate the runtime of the test script, do not add new tests, but modify existing ones according to these criteria: - The test does not have a prerequisite. - The 'git rebase' command is not guarded by test_must_fail. The pick commands are optional in the FAKE_LINES variable, but when used, they do end up in the insn sheet. Test them, too. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 29 October 2018, 00:50:20 UTC |
32ee384 | Sebastian Staudt | 25 October 2018, 17:41:45 UTC | travis-ci: no longer use containers Travis CI will soon deprecate the container-based infrastructure enabled by `sudo: false` in ce59dffb34190e780be2fa9f449f842cadee9753. More info: https://blog.travis-ci.com/2018-10-04-combining-linux-infrastructures Signed-off-by: Sebastian Staudt <koraktor@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 26 October 2018, 04:32:43 UTC |
3063477 | Torsten Bögershausen | 25 October 2018, 16:13:08 UTC | path.c: char is not (always) signed If a "char" in C is signed or unsigned is not specified, because it is out of tradition "implementation dependent". Therefore constructs like "if (name[i] < 0)" are not portable, use "if (name[i] & 0x80)" instead. Detected by "gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516" when setting DEVELOPER = 1 DEVOPTS = extra-all Signed-off-by: Torsten Bögershausen <tboegi@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 26 October 2018, 02:20:01 UTC |
aaaa881 | Jeff King | 24 October 2018, 07:27:52 UTC | upload-pack: fix broken if/else chain in config callback The upload_pack_config() callback uses an if/else chain like: if (!strcmp(var, "a")) ... else if (!strcmp(var, "b")) ... etc This works as long as the conditions are mutually exclusive, but one of them is not. 20b20a22f8 (upload-pack: provide a hook for running pack-objects, 2016-05-18) added: else if (current_config_scope() != CONFIG_SCOPE_REPO) { ... check some more options ... } That was fine in that commit, because it came at the end of the chain. But later, 10ac85c785 (upload-pack: add object filtering for partial clone, 2017-12-08) did this: else if (current_config_scope() != CONFIG_SCOPE_REPO) { ... check some more options ... } else if (!strcmp("uploadpack.allowfilter", var)) ... We'd always check the scope condition first, meaning we'd _only_ respect allowfilter when it's in the repo config. You can see this with: git -c uploadpack.allowfilter=true upload-pack . | head -1 which will not advertise the filter capability (but will after this patch). We never noticed because: - our tests always set it in the repo config - in protocol v2, we use a different code path that actually calls repo_config_get_bool() separately, so that _does_ work. Real-world people experimenting with this may be using v2. The more recent uploadpack.allowrefinwant option is in the same boat. There are a few possible fixes: 1. Bump the scope conditional back to the bottom of the chain. But that just means somebody else is likely to make the same mistake later. 2. Make the conditional more like the others. I.e.: else if (!current_config_scope() != CONFIG_SCOPE_REPO && !strcmp(var, "uploadpack.notallowedinrepo")) This works, but the idea of the original structure was that we may grow multiple sensitive options like this. 3. Pull it out of the chain entirely. The chain mostly serves to avoid extra strcmp() calls after we've found a match. But it's not worth caring about those. In the worst case, when there isn't a match, we're already hitting every strcmp (and this happens regularly for stuff like "core.bare", etc). This patch does (3). Signed-off-by: Jeff King <peff@peff.net> Reviewed-by: Josh Steadmon <steadmon@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 26 October 2018, 01:30:59 UTC |
5e495f8 | Uwe Kleine-König | 24 October 2018, 08:04:52 UTC | howto/using-merge-subtree: mention --allow-unrelated-histories Without passing --allow-unrelated-histories the command sequence fails as intended since commit e379fdf34fee ("merge: refuse to create too cool a merge by default"). To setup a subtree merging unrelated histories is normal, so add the option to the howto document. Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 October 2018, 05:45:15 UTC |
5dcfbf5 | Johannes Schindelin | 24 October 2018, 15:56:13 UTC | repack -ad: prune the list of shallow commits `git repack` can drop unreachable commits without further warning, making the corresponding entries in `.git/shallow` invalid, which causes serious problems when deepening the branches. One scenario where unreachable commits are dropped by `git repack` is when a `git fetch --prune` (or even a `git fetch` when a ref was force-pushed in the meantime) can make a commit unreachable that was reachable before. Therefore it is not safe to assume that a `git repack -adlf` will keep unreachable commits alone (under the assumption that they had not been packed in the first place, which is an assumption at least some of Git's code seems to make). This is particularly important to keep in mind when looking at the `.git/shallow` file: if any commits listed in that file become unreachable, it is not a problem, but if they go missing, it *is* a problem. One symptom of this problem is that a deepening fetch may now fail with fatal: error in object: unshallow <commit-hash> To avoid this problem, let's prune the shallow list in `git repack` when the `-d` option is passed, unless `-A` is passed, too (which would force the now-unreachable objects to be turned into loose objects instead of being deleted). Additionally, we also need to take `--keep-reachable` and `--unpack-unreachable=<date>` into account. Note: an alternative solution discussed during the review of this patch was to teach `git fetch` to simply ignore entries in .git/shallow if the corresponding commits do not exist locally. A quick test, however, revealed that the .git/shallow file is written during a shallow *clone*, in which case the commits do not exist, either, but the "shallow" line *does* need to be sent. Therefore, this approach would be a lot more finicky than the approach presented by the this patch. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 October 2018, 03:59:27 UTC |
2588f6e | Johannes Schindelin | 24 October 2018, 15:56:12 UTC | shallow: offer to prune only non-existing entries The `prune_shallow()` function wants a full reachability check to be completed before it goes to work, to ensure that all unreachable entries are removed from the shallow file. However, in the upcoming patch we do not even want to go that far. We really only need to remove entries corresponding to pruned commits, i.e. to commits that no longer exist. Let's support that use case. Rather than extending the signature of `prune_shallow()` to accept another Boolean, let's turn it into a bit field and declare constants, for readability. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 October 2018, 03:59:27 UTC |
328a435 | Johannes Schindelin | 24 October 2018, 15:56:10 UTC | repack: point out a bug handling stale shallow info A `git fetch --prune` can turn previously-reachable objects unreachable, even commits that are in the `shallow` list. A subsequent `git repack -ad` will then unceremoniously drop those unreachable commits, and the `shallow` list will become stale. This means that when we try to fetch with a larger `--depth` the next time, we may end up with: fatal: error in object: unshallow <commit-hash> Reported by Alejandro Pauly. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 October 2018, 03:59:27 UTC |
f67b980 | Junio C Hamano | 25 October 2018, 02:41:09 UTC | t0061: adjust to test-tool transition | 25 October 2018, 02:41:09 UTC |
321fd82 | Jeff King | 24 October 2018, 07:38:00 UTC | run-command: mark path lookup errors with ENOENT Since commit e3a434468f (run-command: use the async-signal-safe execv instead of execvp, 2017-04-19), prepare_cmd() does its own PATH lookup for any commands we run (on non-Windows platforms). However, its logic does not match the old execvp call when we fail to find a matching entry in the PATH. Instead of feeding the name directly to execv, execvp would consider that an ENOENT error. By continuing and passing the name directly to execv, we effectively behave as if "." was included at the end of the PATH. This can have confusing and even dangerous results. The fix itself is pretty straight-forward. There's a new test in t0061 to cover this explicitly, and I've also added a duplicate of the ENOENT test to ensure that we return the correct errno for this case. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 25 October 2018, 02:06:51 UTC |
b84c783 | Junio C Hamano | 24 October 2018, 01:25:12 UTC | fsck: s/++i > 1/i++/ Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 October 2018, 01:25:12 UTC |
05b4ed6 | Junio C Hamano | 24 October 2018, 01:10:10 UTC | cocci: simplify "if (++u > 1)" to "if (u++)" It is more common to use post-increment than pre-increment when the side effect is the primary thing we want in our code and in C in general (unlike C++). Initializing a variable to 0, incrementing it every time we do something, and checking if we have already done that thing to guard the code to do that thing, is easier to understand when written if (u++) ; /* we've done that! */ else do_it(); /* just once. */ but if you try to use pre-increment, you end up with a less natural looking if (++u > 1) Signed-off-by: Junio C Hamano <gitster@pobox.com> | 24 October 2018, 01:10:10 UTC |
669b1d2 | Matthew DeVore | 23 October 2018, 01:13:42 UTC | exclude-promisor-objects: declare when option is allowed The --exclude-promisor-objects option causes some funny behavior in at least two commands: log and blame. It causes a BUG crash: $ git log --exclude-promisor-objects BUG: revision.c:2143: exclude_promisor_objects can only be used when fetch_if_missing is 0 Aborted [134] Fix this such that the option is treated like any other unknown option. The commands that must support it are limited, so declare in those commands that the flag is supported. In particular: pack-objects prune rev-list The commands were found by searching for logic which parses --exclude-promisor-objects outside of revision.c. Extra logic outside of revision.c is needed because fetch_if_missing must be turned on before revision.c sees the option or it will BUG-crash. The above list is supported by the fact that no other command is introspectively invoked by another command passing --exclude-promisor-object. Signed-off-by: Matthew DeVore <matvore@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 04:52:57 UTC |
368a891 | Matthew DeVore | 23 October 2018, 01:13:41 UTC | Documentation/git-log.txt: do not show --exclude-promisor-objects Do not suggest that --exclude-promisor-objects is supported by git-log, since it currently BUG-crashes and it's not necessary to support it. Options that control behavior for promisor objects should be limited to a small number of commands. Signed-off-by: Matthew DeVore <matvore@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 04:44:11 UTC |
081d916 | Andreas Heiduk | 22 October 2018, 20:45:46 UTC | doc: fix formatting in git-update-ref Remove the parapgraph numbers from lines explaining the reflog format and typeset these lines in monospace. Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:09 UTC |
9aab3fc | Andreas Heiduk | 22 October 2018, 20:45:45 UTC | doc: fix indentation of listing blocks in gitweb.conf.txt 'gitweb.conf.txt' uses inconsistent indentation in listing blocks and a mix of listing blocks and literal paragraphs. Both didn't look pretty in the rendered HTML page. Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:09 UTC |
a5e14ea | Andreas Heiduk | 22 October 2018, 20:45:44 UTC | doc: fix descripion for 'git tag --format' The '--format=<format>' is now listed in the 'OPTIONS' section, not only the '<format>' string itself. The description moved up a few paragraphs because '<format>' is not a standalone paramater but a parameter for the option '--format'. Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:09 UTC |
ad47194 | Andreas Heiduk | 22 October 2018, 20:45:43 UTC | doc: fix inappropriate monospace formatting Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:09 UTC |
39a3682 | Andreas Heiduk | 22 October 2018, 20:45:42 UTC | doc: fix ASCII art tab spacing Followup to 5dd05ebf ("doc: fix merge-base ASCII art tab spacing", 2016-10-21) Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:09 UTC |
e44a44a | Andreas Heiduk | 22 October 2018, 20:45:41 UTC | doc: clarify boundaries of 'git worktree list --porcelain' Defined delimiters for 'git worktree list --porcelain' make the format easier to parse in scripts. For example sed -n '/^worktree ID$/,/^$/p' extracts only the information for the worktree 'ID'. The format did not changed since [1], only the guaranty is added. [1] bb9c03b82a (worktree: add 'list' command, 2015-10-08) Signed-off-by: Andreas Heiduk <asheiduk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 23 October 2018, 03:23:08 UTC |
ffd04e9 | Johannes Sixt | 19 October 2018, 16:58:07 UTC | diff: don't attempt to strip prefix from absolute Windows paths git diff can be invoked with absolute paths. Typically, this triggers the --no-index case. Then the absolute paths remain in the file names that are printed in the output. There is one peculiarity, though: When the command is invoked from a a sub-directory in a repository, then it is attempted to strip the sub-directory from the beginning of relative paths. Yet, to detect a relative path the code just checks for an initial forward slash. This mistakes a Windows style path like "D:/base" as a relative path and the output looks like this, for example: D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff 1 1 ir/{base => diff}/1.txt where the correct output should be D:\dir\test\one>git -P diff --numstat D:\dir\base D:\dir\diff 1 1 D:/dir/{base => diff}/1.txt If the sub-directory where 'git diff' is invoked is sufficiently deep that the prefix becomes longer than the path to be printed, then the subsequent code accesses the path out of bounds. Use is_absolute_path() to detect Windows style absolute paths. One might wonder whether the check for a directory separator that is visible in the patch context should be changed from == '/' to is_dir_sep() or not. It turns out not to be necessary. That code only ever investigates paths that have undergone pathspec normalization, after which there are only forward slashes even on Windows. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 22 October 2018, 01:17:50 UTC |
b072a25 | Junio C Hamano | 19 October 2018, 04:57:35 UTC | receive: denyCurrentBranch=updateinstead should not blindly update The handling of receive.denyCurrentBranch=updateInstead was added to a switch statement that handles other values of the variable, but all the other case arms only checked a condition to reject the attempted push, or let later logic in the same function to still intervene, so that a push that does not fast-forward (which is checked after the switch statement in question) is still rejected. But the handling of updateInstead incorrectly took immediate effect, without giving other checks a chance to intervene. Instead of calling update_worktree() that causes the side effect immediately, just note the fact that we will need to call the function later, and first give other checks a chance to reject the request. After the update-hook gets a chance to reject the push (which happens as the last step in a series of checks), call update_worktree() when we earlier detected the need to. Reported-by: Rajesh Madamanchi Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 October 2018, 06:13:32 UTC |
34204c8 | Johannes Schindelin | 16 October 2018, 21:02:52 UTC | pack-objects (mingw): initialize `packing_data` mutex in the correct spot In 9ac3f0e5b3e4 (pack-objects: fix performance issues on packing large deltas, 2018-07-22), a mutex was introduced that is used to guard the call to set the delta size. This commit even added code to initialize it, but at an incorrect spot: in `init_threaded_search()`, while the call to `oe_set_delta_size()` (and hence to `packing_data_lock()`) can happen in the call chain `check_object()` <- `get_object_details()` <- `prepare_pack()` <- `cmd_pack_objects()`, which is long before the `prepare_pack()` function calls `ll_find_deltas()` (which initializes the threaded search). Another tell-tale that the mutex was initialized in an incorrect spot is that the function to initialize it lives in builtin/, while the code that uses the mutex is defined in a libgit.a header file. Let's use a more appropriate function: `prepare_packing_data()`, which not only lives in libgit.a, but *has* to be called before the `packing_data` struct is used that contains that mutex. This fixes https://github.com/git-for-windows/git/issues/1839. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 October 2018, 05:28:44 UTC |
9308f45 | Johannes Schindelin | 16 October 2018, 21:02:50 UTC | pack-objects (mingw): demonstrate a segmentation fault with large deltas There is a problem in the way 9ac3f0e5b3e4 (pack-objects: fix performance issues on packing large deltas, 2018-07-22) initializes that mutex in the `packing_data` struct. The problem manifests in a segmentation fault on Windows, when a mutex (AKA critical section) is accessed without being initialized. (With pthreads, you apparently do not really have to initialize them?) This was reported in https://github.com/git-for-windows/git/issues/1839. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 October 2018, 05:28:44 UTC |
ce498e0 | Johannes Schindelin | 16 October 2018, 21:02:49 UTC | pack-objects: fix typo 'detla' -> 'delta' Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 October 2018, 05:28:15 UTC |
c5d844a | Saulius Gurklys | 17 October 2018, 05:37:41 UTC | doc: fix small typo in git show-branch Fix small typo as in document <glob> is used not <globs>. Signed-off-by: Saulius Gurklys <s4uliu5@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 October 2018, 03:26:51 UTC |
2e3c894 | Tao Qingyun | 16 October 2018, 14:19:20 UTC | branch: trivial style fix Signed-off-by: Tao Qingyun <taoqy@ls-a.me> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 October 2018, 02:15:20 UTC |
8d20081 | Tao Qingyun | 16 October 2018, 14:54:28 UTC | builtin/branch.c: remove useless branch_get branch_get sometimes returns current_branch, which can be NULL (e.g., if you're on a detached HEAD). Try: $ git branch HEAD fatal: no such branch 'HEAD' $ git branch '' fatal: no such branch '' However, it seems weird that we'd check those cases here (and provide such lousy messages). And indeed, dropping that and letting us eventually hit create_branch() gives a much better message: $ git branch HEAD fatal: 'HEAD' is not a valid branch name. $ git branch '' fatal: '' is not a valid branch name. Signed-off-by: Tao Qingyun <taoqy@ls-a.me> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 18 October 2018, 01:57:31 UTC |
0400583 | Noam Postavsky | 02 September 2018, 00:07:16 UTC | log: fix coloring of certain octopus merge shapes For octopus merges where the first parent edge immediately merges into the next column to the left, the number of columns should be one less than the usual case. First parent to the left case: | *-. | |\ \ |/ / / The usual case: | *-. | |\ \ | | | * Also refactor the code to iterate over columns rather than dashes, building from an initial patch suggested by Jeff King. Signed-off-by: Noam Postavsky <npostavs@users.sourceforge.net> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 12 October 2018, 03:22:48 UTC |