On Sun, Jun 10, 2018 at 09:44:45PM +0200, Clemens Buchacher wrote: > diff --git a/Documentation/config.txt b/Documentation/config.txt > index b6cb997164..17af0fe163 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -923,6 +923,14 @@ core.sparseCheckout:: > Enable "sparse checkout" feature. See section "Sparse checkout" in > linkgit:git-read-tree[1] for more information. > > +core.checkoutInplace:: Perhaps "core.checkoutInPlace" (captialized "place")? > + Checkout file contents in-place. By default Git checkout removes existing "Check out". > + work tree files before it replaces them with different contents. If this > + option is enabled Git will overwrite the contents of existing files > + in-place. This is useful on systems where open file handles to a removed Here and above, uou don't need to hyphenate "in place" when used as an adverb, only when using it as an adjective before the noun (e.g. "in-place checkout"). > + file prevent creating new files at the same path. Note that Git will not > + update read/write permissions according to umask. I'm wondering if it's worth a mention that running out of disk space (or quota) will cause data to be truncated. > static void *read_blob_entry(const struct cache_entry *ce, unsigned long *size) > @@ -470,8 +475,15 @@ int checkout_entry(struct cache_entry *ce, > if (!state->force) > return error("%s is a directory", path.buf); > remove_subtree(&path); > - } else if (unlink(path.buf)) > - return error_errno("unable to unlink old '%s'", path.buf); > + } else if (checkout_inplace) { > + if (!(st.st_mode & 0200) || > + (trust_executable_bit && (st.st_mode & 0100) != (ce->ce_mode & 0100))) > + if (chmod(path.buf, (ce->ce_mode & 0100) ? 0777 : 0666)) > + return error_errno("unable to change mode of '%s'", path.buf); So in-place checkout won't work if the mode changes and we're not the owner of the file. One place where I could see people wanting to use this on Unix is shared repositories with BSD group semantics, but that wouldn't work reliably. I don't see that as a problem, as that isn't the issue this patch is trying to solve, but it may end up biting people. -- brian m. carlson: Houston, Texas, US OpenPGP: https://keybase.io/bk2204
Attachment:
signature.asc
Description: PGP signature