Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git clean removes content of symlinks #607

Closed
illuxio opened this issue Jan 15, 2016 · 42 comments
Closed

git clean removes content of symlinks #607

illuxio opened this issue Jan 15, 2016 · 42 comments
Milestone

Comments

@illuxio
Copy link

illuxio commented Jan 15, 2016

Hallo,

I'm using git version 2.7.0. I discovered recently that a git clean -xdfdeletes the content of my symlinks that are in my .gitignore file instead of removing the symlinks as in unix.

The symlinks was created by the command npm link.

I hop you will fix this soon.

@dscho
Copy link
Member

dscho commented Jan 15, 2016

The symlinks was created by the command npm link.

Please note that it is unreasonable to expect everybody to have npm installed (besides, you did not specify which npm. So you need to do a little homework and figure out what npm calls underneath, and come up with a Minimal, Complete & Verifiable Example.

I hop you will fix this soon.

I hope you realize that a statement like this is prone to cause the opposite of what you want. After all, who likes to be underappreciated and pushed around?

@illuxio
Copy link
Author

illuxio commented Jan 15, 2016

As far as I understand npm uses junctions (can be created by mklink \J Link Target).

To reproduce the bug:

  • create git repo with files
    • .gitignore
    • target/README.md
  • Add /link to .gitignore
  • Commit all files
  • Execute in cmd.exe mklink \J link target to link the link and target
  • Execute git clean -xdf

Now you will see that README.md is missing in target.

@rimrul
Copy link
Member

rimrul commented Jan 15, 2016

EDIT: I messed this up. This comment and the next four are me accidentially leading this issue in the wrong direction.

  • create git repo with files
  • .gitignore
  • target/README.md
  • Add /link to .gitignore
  • Commit all files
  • Execute in cmd.exe mklink \J link target to link the link and target
  • Execute git clean -xdf

Ummm... you have the folder target inside the repository, add the files inside it to the repository, and wonder that git clean -xdf doesn't ignore the folder? Does this only seem like the intended behaviour to me?

@illuxio
Copy link
Author

illuxio commented Jan 15, 2016

I don't think so, because executing rm -rf link in the git bash or deleting the link in the explorer will not result in an empty target folder...

@rimrul
Copy link
Member

rimrul commented Jan 15, 2016

I don't think so, because executing rm -rf link in the git bash or deleting the link in the explorer will not result in an empty target folder...

How about rm -rf target?

@illuxio
Copy link
Author

illuxio commented Jan 15, 2016

Sure this will delete the target folder and the README.md, but this is not the point.
For me sound this like the question why git clean -xdf does not remove all file from the git repo.

My problem is that I have a folder "target" with files and obviously a junction "link" (a type of symlink) that links to this folder. Target and is files is wanted inside the repo and the junction "link" is not. Therefore, the the junction "link" is in the .gitignore file.

What I expected from git clean -xdf is that all wanted files style and all unwanted files are removed. This is not the case because "link" and all files inside "target" are removed.

@rimrul
Copy link
Member

rimrul commented Jan 15, 2016

Sure this will delete the target folder and the README.md, but this is not the point.
For me sound this like the question why git clean -xdf does not remove all file from the git repo.

Sorry. I messed this up by not looking up, what exactly git clean -xdf is supposed to do...

Please accept my appology for wasting your time.

I can confirm that git clean -xdf doesn't touch the file on a Linux symlink.

@illuxio
Copy link
Author

illuxio commented Jan 15, 2016

No problem. I think with my addition it is now more precise.

@whoisj
Copy link

whoisj commented Jan 20, 2016

so basically you want git clean -xdf to not follow junctions, but delete them unless they're ignored with a -e flag?

@illuxio
Copy link
Author

illuxio commented Jan 20, 2016

Exactly.

J Wyman [email protected] schrieb am Mi., 20. Jan. 2016 19:19:

so basically you want git clean -xdf to not follow junctions, but delete
them unless they're ignored with a -e flag?


Reply to this email directly or view it on GitHub
#607 (comment)
.

@whoisj
Copy link

whoisj commented Jan 20, 2016

Exactly.

I implemented similar logic for Libgit2 some time ago. I can assist here as well, though I doubt I'd have time to generate a full pull request on the topic.

Win32's FindFirstFile/FindNextFile iterator structure returns enough information in WIN32_FIND_DATA to detect if a node is a reparse point or not ((fd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)). From there a DeviceIoControl with FSCTL_DELETE_REPARSE_POINT should achieve what you want - the important piece is to detect the reparse point (aka Junction) and handle it as one.

@dscho
Copy link
Member

dscho commented May 12, 2016

After such a long time, I have made up my mind. As pointed out in #437, junction points are just different enough from symlinks to not be treated as such. If you create a directory junction point, you really make the target directory accessible as a directory in the local directory. Note: this is not a symbolic link, but more like a "hard link" (if directories could be hard linked).

In short: if you have a directory junction point and try to delete it recursively, I think that we do the exact right thing by removing the directory contents, too.

@illuxio if you disagree, please try to convince me that this is an improper take. And be prepared to do the heavy-lifting of the change after that.

@stasberkov
Copy link

stasberkov commented Feb 9, 2017

@dscho git for windows should handle junctions the same way as other Windows programs do -- delete junction but not its content. I.e. when in Windows Explorer you delete directory that contains junction you delete just junction but not its content. The same way other Windows file managers behave. E.g. cmd.exe command rmdir dir-that-have-inner-junction /s removes just junction but not junction content even when /s recursive option is specified. Far Manager behaves the same way.

@dscho
Copy link
Member

dscho commented Feb 9, 2017

@stasberkov I could be convinced by a patch implementing that logic ;-)

@hypersw
Copy link

hypersw commented Nov 6, 2017

Directory junctions are the most convenient softlinks for Windows NT directories — the symlink directory softlinks have lots of problems, like requiring special privileges, being interpreted at user level rather than by filesystem, which results in different processing depending on the client (e.g. when exposing the folder as a network share). So junctions are a sane choice. And we usually expect them to behave as softlinks in case of deletion.

We experience undesired side-effects from the clean command on softlinks done thru junctions. On client machines, this corrupts files shared between working copies in the context of the other working copy. On server machines, this unwantedly wipes up cached files.

How about the implementation which isn't dependent on extra system calls (we use similar technique in ReSharper and Rider filesystem components to handle deletion consistently):

  • First, delete the directory filesystem object itself.
    • On an empty directory, this just deletes. All done.
    • On a softlink source, this breaks the link and deletes the source directory. The target remains untouched. All done.
    • On a real non-empty directory, this does nothing and returns a refuse result. Ignore this and proceed.
  • Second (unless done), recurse into child directories and files to run the full delete for them.
  • Third, delete the directory again. This time an error is an error.

The second and third steps are already there, this just adds the first probe to kill the directory (or link source) directly. Haven't seen any noticeable side-effects from this so far. Is very easy to implement. Does not dig into filesystem implementation details.
What do you think?

@whoisj
Copy link

whoisj commented Nov 6, 2017

@hypersw I like your approach, it makes a lot of sense; however I have to say that there are already those that depend on the existing behavior and changing it could/would cause them heartburn and send them here complaining in the opposite direction.

The best solution here would be for somebody who really wants and/or needs this functionality to offer up a solution via pull-requests which implements the solution; and places it behind a configuration flag so that users who depend on the existing functionality aren't broken by the improved functionality.

Why do I suggest "somebody else" do the work? Personally, I'm already 110% scheduled and @dscho is likely in a similar situation. If those who want/need this change are happy waiting until such a time that somebody has available time to implement it, then that's fine - however if they're not happy to wait, then they need to act. Open-source is awesome like that. 😄

@PhilipOakley
Copy link

@hypersw Is the idea easy to code and test within the GfW codebase? A proof of concept (PoC) pull request (PR) may help things along.

Does this make all the mechanisms (junctions, reparse points, etc) the same as the upstream Git's view of symlinks? And if not, how should it be documented so that it is really easy to understand (especially as 95% of web explanations would be the upstream viewpoint, so Windows users may never see the documentation...).

@BurtHarris
Copy link

Running into the same problem in the context of building a mulit-package repro with junctions set up by the NPM package manager. The behavior of git clean -idx is extremely surprising and can be difficult for someone without a lot of git experience to recover from. @hypersw's proposed solution makes a lot of sense to me.

I could find the time to try to tackle this, but I will probably need some help navigating this repro's conventions.

@whoisj I have a hard time imagining how anyone might consider this behavior a feature. Can you cite an example?

@PhilipOakley
Copy link

PhilipOakley commented Dec 25, 2017 via email

halldorfannar added a commit to halldorfannar/git that referenced this issue Dec 29, 2017
…nks]

There was already code in the readlink function of mingw.c that correctly handled mount points (AKA 'junctions') so it was rather straight-forward to replicate that code into the two other locations where links are handled. I tested before and after these changes and git clean now handles junctions like other soft links.
halldorfannar added a commit to halldorfannar/git that referenced this issue Dec 29, 2017
…nks]

There was already code in the readlink function of mingw.c that correctly handled mount points (AKA 'junctions') so it was rather straight-forward to replicate that code into the two other locations where links are handled. I tested before and after these changes and git clean now handles junctions like other soft links.
dscho added a commit that referenced this issue Oct 10, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 10, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 10, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 11, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 11, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Oct 11, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Oct 11, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Oct 20, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Oct 20, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho pushed a commit to dscho/git that referenced this issue Oct 21, 2024
dscho added a commit that referenced this issue Oct 21, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 21, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 21, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Oct 23, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 25, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 25, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 25, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Oct 30, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Nov 1, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
git-for-windows-ci pushed a commit that referenced this issue Nov 6, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Nov 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Nov 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Nov 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
dscho added a commit that referenced this issue Nov 22, 2024
It seems to be not exactly rare on Windows to install NTFS junction
points (the equivalent of "bind mounts" on Linux/Unix) in worktrees,
e.g. to map some development tools into a subdirectory.

In such a scenario, it is pretty horrible if `git clean -dfx` traverses
into the mapped directory and starts to "clean up".

Let's just not do that. Let's make sure before we traverse into a
directory that it is not a mount point (or junction).

This addresses #607

Signed-off-by: Johannes Schindelin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.