From: Clemens Buchacher <drizzd@aon.at>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 5/5] do not overwrite files in leading path
Date: Thu, 14 Oct 2010 00:34:25 +0200 [thread overview]
Message-ID: <20101013223425.GB2558@localhost> (raw)
In-Reply-To: <7v1v7tkb6g.fsf@alter.siamese.dyndns.org>
[-- Attachment #1: Type: text/plain, Size: 3140 bytes --]
On Wed, Oct 13, 2010 at 02:57:59PM -0700, Junio C Hamano wrote:
> Clemens Buchacher <drizzd@aon.at> writes:
>
> > If the work tree contains an untracked file x, and
> > unpack-trees wants to checkout a path x/*, the
> > file x is removed unconditionally.
> >
> > Instead, apply the same checks that are normally
> > used for untracked files, and abort if the file
> > cannot be removed.
> >
>
> Too short a line is also hard to read as too long a line.
Ok.
> > diff --git a/cache.h b/cache.h
> > index 2ef2fa3..f65d6f9 100644
> > --- a/cache.h
> > +++ b/cache.h
> > @@ -852,7 +852,7 @@ struct cache_def {
> >
> > extern int has_symlink_leading_path(const char *name, int len);
> > extern int threaded_has_symlink_leading_path(struct cache_def *, const char *, int);
> > -extern int has_symlink_or_noent_leading_path(const char *name, int len);
> > +extern int check_leading_path(const char *name, int len);
>
> This is an API regression. "check" in function name "check-blah" does not
> tell what you are checking (is it checking if the path is Ok? is it
> checking if the path has symlinked components? is it checking if some
> part of the path overlaps with tracked content? is it checking if you
> have already run lstat(2) on some of the leading path components?), nor
> for what purpose the check can be used (it is Ok to overwrite it?, is it
> Ok to create a directory there? is it Ok to create a file there?).
>
> At least the old name told us what it checked, didn't it?
Yes, but that's not what it does any more. I worded it vague on
purpose, because there is really no way to explain all it does in
one function name. This is the full description.
/*
* Return zero if path 'name' has a leading symlink component or
* if some leading path component does not exists.
*
* Return -1 if leading path exists and is a directory.
*
* Return path length if leading path exists and is neither a
* directory nor a symlink.
*/
But if you prefer, we can call it "verify_clean_leading_path"?
> The approach you took looks sound, though. What did you feel was "not
> exactly pretty" about it?
First, check_leading_path bothers me. It does too many things and
encodes all of that in one integer return value.
Second, I also have to copy the offending path manually to a local
path variable, even though lstat_cache already has that path stored
in a buffer.
Third, check_ok_to_remove expects a cache_entry. But in case of a
match in check_leading_path, we do not have one and pass NULL to
check_ok_to_rmove. It will not be used anyways, because
check_leading_path should return > 0 only for regular files, and
the cache_entry is only used for directories in
verify_clean_subdirectory.
If lstat returns with an error other than NOENT, or if
check_ok_to_remove is called with anything other than a directory
and cache_entry is NULL, we get a segmentation fault. Before, an
error was simply ignored. I don't know which is worse.
On the other hand, I think the patch fixes a nasty bug, so maybe we
can accept those issues for now.
Clemens
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2010-10-13 22:34 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-17 5:21 git merge, .gitignore, and silently overwriting untracked files Joshua Jensen
2010-08-17 19:33 ` Junio C Hamano
2010-08-18 23:39 ` [PATCH] optionally disable overwriting of ignored files Clemens Buchacher
2010-08-19 10:41 ` Jakub Narebski
2010-08-20 18:48 ` Clemens Buchacher
2010-08-20 19:01 ` Joshua Jensen
2010-08-20 20:35 ` Junio C Hamano
2010-08-21 8:05 ` Clemens Buchacher
2010-08-22 7:25 ` Junio C Hamano
2010-08-22 8:20 ` Clemens Buchacher
2010-10-09 22:39 ` Kevin Ballard
2010-08-21 13:23 ` Clemens Buchacher
2010-10-09 13:52 ` [PATCH 0/5] do not overwrite untracked files in leading path Clemens Buchacher
2010-10-09 13:52 ` [PATCH 1/5] t7607: use test_commit and test_must_fail Clemens Buchacher
2010-10-10 6:35 ` Jonathan Nieder
2010-10-10 8:35 ` [PATCH 1/5 v2] t7607: use test-lib functions and check MERGE_HEAD Clemens Buchacher
2010-10-13 21:33 ` Junio C Hamano
2010-10-13 21:59 ` Junio C Hamano
2010-10-09 13:52 ` [PATCH 2/5] t7607: add leading-path tests Clemens Buchacher
2010-10-09 19:14 ` Johannes Sixt
2010-10-10 8:38 ` [PATCH 2/5 v2] " Clemens Buchacher
2010-10-09 13:52 ` [PATCH 3/5] add function check_ok_to_remove() Clemens Buchacher
2010-10-13 21:43 ` Junio C Hamano
2010-10-09 13:52 ` [PATCH 4/5] lstat_cache: optionally return match_len Clemens Buchacher
2010-10-09 13:53 ` [PATCH 5/5] do not overwrite files in leading path Clemens Buchacher
2010-10-13 21:57 ` Junio C Hamano
2010-10-13 22:34 ` Clemens Buchacher [this message]
2010-10-15 6:48 ` Clemens Buchacher
2010-10-15 18:47 ` Junio C Hamano
2010-08-20 20:46 ` [PATCH] optionally disable overwriting of ignored files Junio C Hamano
2010-08-21 6:48 ` [PATCH v2] " Clemens Buchacher
2010-08-23 8:33 ` [PATCH] " Matthieu Moy
2010-08-31 18:44 ` Heiko Voigt
2010-08-23 9:37 ` Matthieu Moy
2010-08-23 13:56 ` Holger Hellmuth
2010-08-23 15:11 ` Clemens Buchacher
2010-08-23 15:57 ` Junio C Hamano
2010-08-24 7:28 ` Clemens Buchacher
2010-08-24 16:19 ` Junio C Hamano
2018-10-16 9:10 ` Ignored files being silently overwritten when switching branches Ævar Arnfjörð Bjarmason
2018-10-16 15:05 ` Duy Nguyen
2018-10-18 1:55 ` Junio C Hamano
2018-11-06 15:12 ` Checkout deleted semi-untracked file Ævar Arnfjörð Bjarmason
2018-11-11 9:52 ` [RFC PATCH] Introduce "precious" file concept Nguyễn Thái Ngọc Duy
2018-11-11 12:15 ` Bert Wesarg
2018-11-11 12:59 ` Junio C Hamano
2018-11-26 19:38 ` [PATCH v2 0/2] Precios files round two Nguyễn Thái Ngọc Duy
2018-11-26 19:38 ` [PATCH v2 1/2] Introduce "precious" file concept Nguyễn Thái Ngọc Duy
2018-11-26 19:38 ` [PATCH v2 2/2] unpack-trees: support core.allIgnoredFilesArePreciousWhenMerging Nguyễn Thái Ngọc Duy
2018-11-11 12:33 ` [RFC PATCH] Introduce "precious" file concept Ævar Arnfjörð Bjarmason
2018-11-11 13:06 ` Ævar Arnfjörð Bjarmason
2018-11-12 16:14 ` Duy Nguyen
2018-11-11 15:41 ` Duy Nguyen
2018-11-11 16:55 ` Ævar Arnfjörð Bjarmason
2018-11-12 7:35 ` Per Lundberg
2018-11-12 9:08 ` Matthieu Moy
2018-11-12 9:49 ` Ævar Arnfjörð Bjarmason
2018-11-12 10:26 ` Junio C Hamano
2018-11-12 12:45 ` Ævar Arnfjörð Bjarmason
2018-11-12 13:02 ` Junio C Hamano
2018-11-12 16:07 ` Duy Nguyen
2018-11-12 23:22 ` brian m. carlson
2018-11-26 9:30 ` Per Lundberg
2018-11-26 10:28 ` Ævar Arnfjörð Bjarmason
2018-11-26 12:49 ` Junio C Hamano
2018-11-27 15:08 ` Ævar Arnfjörð Bjarmason
2018-11-28 3:58 ` Junio C Hamano
2018-11-28 21:54 ` Ævar Arnfjörð Bjarmason
2018-11-29 5:04 ` Junio C Hamano
2018-12-01 6:21 ` Duy Nguyen
2018-11-26 15:26 ` Duy Nguyen
2018-11-26 15:34 ` Ævar Arnfjörð Bjarmason
2018-11-26 15:40 ` Duy Nguyen
2018-11-26 15:47 ` Ævar Arnfjörð Bjarmason
2018-11-26 15:55 ` Duy Nguyen
2018-11-27 9:43 ` Per Lundberg
2018-11-27 12:55 ` Jacob Keller
2018-11-27 14:50 ` Per Lundberg
2018-11-28 1:21 ` brian m. carlson
2018-11-28 6:54 ` Per Lundberg
2018-11-27 15:19 ` Duy Nguyen
2018-12-06 18:39 ` Duy Nguyen
2018-11-26 16:02 ` Eckhard Maaß
-- strict thread matches above, loose matches on Subject: below --
2018-10-15 13:01 Ignored files being silently overwritten when switching branches Per Lundberg
2018-10-16 6:40 ` Jeff King
2018-11-06 12:41 Checkout deleted semi-untracked file Steffen Jost
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=20101013223425.GB2558@localhost \
--to=drizzd@aon.at \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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).