Currently git-clean removes only links and files, but
there can be special files like fifo, sockets, devices.
I think git-clean has to remove them too.
Signed-off-by: Andrey Vagin <redacted>
---
cache.h | 8 ++++++++
dir.c | 4 ++++
2 files changed, 12 insertions(+)
From: Johannes Sixt <hidden> Date: 2016-07-15 05:56:32
Am 15.07.2016 um 04:42 schrieb Andrey Vagin:
Currently git-clean removes only links and files, but
there can be special files like fifo, sockets, devices.
I think git-clean has to remove them too.
I think that is not necessary. If you do
mkfifo fifo && sudo mknod zero c 1 5
then 'git status' will not report them and 'git add' will not add them
to a repository.
Similarly, if you happen to have a special file under a name in your
working tree where the repository has regular files, then 'git status'
will report the names as modified, and 'git reset --hard' will replace
the special files by the files recorded in the repository.
IOW: These special files are invisible for Git unless it already knows
the names. The latter case is outside 'git clean's domain, and the
former case really means that special files in the working tree are left
at the user's discretion.
-- Hannes
On Thu, Jul 14, 2016 at 10:56 PM, Johannes Sixt [off-list ref] wrote:
Am 15.07.2016 um 04:42 schrieb Andrey Vagin:
quoted
Currently git-clean removes only links and files, but
there can be special files like fifo, sockets, devices.
I think git-clean has to remove them too.
I think that is not necessary. If you do
mkfifo fifo && sudo mknod zero c 1 5
then 'git status' will not report them and 'git add' will not add them to a
repository.
Similarly, if you happen to have a special file under a name in your working
tree where the repository has regular files, then 'git status' will report
the names as modified, and 'git reset --hard' will replace the special files
by the files recorded in the repository.
IOW: These special files are invisible for Git unless it already knows the
names. The latter case is outside 'git clean's domain, and the former case
really means that special files in the working tree are left at the user's
discretion.
I understand your points, but I don't see any reasons to ignore these files.
What will be wrong if 'git status' will reports these files?
What will be wrong if 'git add' will returns an error instead of
skipping them silently?
How it works now:
[avagin@laptop tmp]$ git add README
[avagin@laptop tmp]$ git add fifo && echo ok
ok
[avagin@laptop tmp]$ git commit -a -m "Add fifo file"
[master b04da32] Add fifo file
1 file changed, 1 insertion(+)
How it works with this patch:
[avagin@laptop tmp]$ ../git/bin-wrappers/git add fifo && echo ok
error: fifo: can only add regular files, symbolic links or git-directories
fatal: adding files failed
I like more when 'git add' reports an error when it can't add a file.
The git-clean man page says that it removes untracked files from the
working tree. It doesn't specifies that there are only links and
regular files.
I won't insist on my point, it may be wrong. But I like when a
behavior is predictable. I didn't expect that 'git status' doesn't
show special files and 'git clean' doesn't remove them. I asked my
colleagues and the current behavior was not obvious for them too.
Thanks,
Andrew
From: Johannes Schindelin <hidden> Date: 2016-07-15 10:49:54
Hi Andrey,
On Fri, 15 Jul 2016, Andrey Vagin wrote:
What will be wrong if 'git status' will reports these [fifo/socket] files?
`git status` is intended to give you an idea what to commit next. And...
What will be wrong if 'git add' will returns an error instead of
skipping them silently?
... we *cannot* commit fifos or sockets. There is simply no representation
in Git's data model for them.
Having said that, I would welcome a patch that makes `git add` complain
about arguments that could not be added (and are not directories).
As to the patch in question, for the above-mentioned reasons, I think we
want to keep the existing behavior instead.
Ciao,
Johannes
From: Johannes Sixt <hidden> Date: 2016-07-15 20:33:53
Am 15.07.2016 um 09:46 schrieb Andrey Vagin:
On Thu, Jul 14, 2016 at 10:56 PM, Johannes Sixt [off-list ref] wrote:
quoted
IOW: These special files are invisible for Git unless it already knows the
names. The latter case is outside 'git clean's domain, and the former case
really means that special files in the working tree are left at the user's
discretion.
I understand your points, but I don't see any reasons to ignore these files.
What will be wrong if 'git status' will reports these files?
What will be wrong if 'git add' will returns an error instead of
skipping them silently?
I can buy that 'git add' reports an error for special files. (And I
concur with Dscho that the behavior should otherwise remain unchanged.)
But this is not what the commit message sells even if the patch changes
the behavior of 'git add', too (I haven't tested the patch).
-- Hannes
From: Andrew Vagin <hidden> Date: 2016-07-16 08:10:00
On Fri, Jul 15, 2016 at 10:33:42PM +0200, Johannes Sixt wrote:
Am 15.07.2016 um 09:46 schrieb Andrey Vagin:
quoted
On Thu, Jul 14, 2016 at 10:56 PM, Johannes Sixt [off-list ref] wrote:
quoted
IOW: These special files are invisible for Git unless it already knows the
names. The latter case is outside 'git clean's domain, and the former case
really means that special files in the working tree are left at the user's
discretion.
I understand your points, but I don't see any reasons to ignore these files.
What will be wrong if 'git status' will reports these files?
What will be wrong if 'git add' will returns an error instead of
skipping them silently?
I can buy that 'git add' reports an error for special files. (And I concur
with Dscho that the behavior should otherwise remain unchanged.) But this is
not what the commit message sells even if the patch changes the behavior of
'git add', too (I haven't tested the patch).