"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Sebastien Marie <semarie@online.fr>
Subject:
Re: install symbolic links in the work tree
To:
gameoftrees@openbsd.org
Date:
Sun, 31 May 2020 15:30:39 +0200

Download raw body.

Thread
On Sun, May 31, 2020 at 02:46:59PM +0200, Stefan Sperling wrote:
> > 
> > First, a general remark about "if a symbolic link cannot be installed we instead
> > create a regular file".
> > 
> > I am a bit unsure about this semantic. Does this particular file is managed in a
> > special way ? or does the next got command will just assume a symlink was
> > deleted and replaced by a plain file ?
> 
> We can never trust the on-disk state anyway. Even if we installed a symlink
> the user can replace that link with a regular file, a directory, a fifo, etc.
> 
> [...]
> 
> Then we can look at what's on disk. It might be a real symlink, or something
> else. Each operation can now do something that fits the semantics we want.
>  
> Is it enough if we simply render symlinks harmless upon checkout?

My point was I find odd that after a "got checkout" a "got diff" would already
points that things changed.

I agree that such harmfull symlink shouldn't be created. I am just uncertain if
the behaviour should be:

1- create a regular file (instead of a symlink)
2- doesn't create anything and skip the entry (with a warning)
3- doesn't create anything and error out

as pointed previously, 1 and 2 are similar in effect: after a clean checkout the
workdir isn't clean (status would report file type changed or file deleted), and
for 3, it could be annoying (and adding a force option isn't a good solution).

maybe 2 is less suprising that 1, but it is just a matter of taste I think.

> I was considering whether 'got commit' should reject symlinks that point
> outside of the work tree, as a precaution. What do think about that?
> There is no way to prevent anyone from creating repositories with bad symlinks.
> But I'm thinking maybe we should prevent accidental commit of such symlinks.

at least it deserves that 'got commit' emits a warning (because it will not
properly checkout/update with 'got').

for rejecting it, I am unsure. as you noted, anybody could create such
repository. I fear that it could add complexity and finally block a user if he
had to deal with such repository.

-- 
Sebastien Marie