ikrabbe/plan9front

Case sensitivity issue in repo

Closed this issue · 17 comments

What happened:
When plan9front is cloned with `hg clone https://code.google.com/p/plan9front/` 
on OS X, the clone fails with:

updating to branch default
abort: case-folding collision between rc/bin/kill and rc/bin/Kill


HFS+ is case-insensitive and case-preserving by default.

What was expected:
No files with identical names except for case in the repository.

Steps to reproduce:
0. Use OS X 10.9.5 or equivalent
1. Clone repo with `hg clone https://code.google.com/p/plan9front/`
2. Cloning fails

Original issue reported on code.google.com by alexchan...@gmail.com on 28 Sep 2014 at 8:33

There's also:
`abort: case-folding collision between sys/lib/postscript/troff/Hx and 
sys/lib/postscript/troff/HX`

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 8:52

Get a real computer.

Original comment by a...@phicode.de on 28 Sep 2014 at 8:53

  • Changed state: ThereIsNoBug
You're killing me, guys:

`abort: case-folding collision between sys/lib/troff/font/devutf/Hb and 
sys/lib/troff/font/devutf/HB`
`abort: case-folding collision between sys/lib/troff/font/devutf/Hi and 
sys/lib/troff/font/devutf/HI`
`abort: case-folding collision between sys/lib/troff/font/devutf/Hx and 
sys/lib/troff/font/devutf/HX`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/lH and 
sys/lib/troff/font/devutf/charlib/LH`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/rc and 
sys/lib/troff/font/devutf/charlib/RC`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/rh and 
sys/lib/troff/font/devutf/charlib/rH`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c1 
and sys/src/cmd/postscript/devpost.add/C1`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c2 
and sys/src/cmd/postscript/devpost.add/C2`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c3 
and sys/src/cmd/postscript/devpost.add/C3`

Could someone remove the conflicting files?

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 9:06

> Get a real computer.

Come on. It costs you *nothing*. It's not a compromise of principles like 
adding Berkeley Sockets or something. It's allowing someone to compile your 
code.

And it costs you *NOTHING*.

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 9:10

Just set your OS to case sensitive, as it should be. Next, people will demand 
8.3 compatible file names so that they compile on DOS.

How are you even planning on compiling 9front on OS X? gcc can "mostly" compile 
Plan 9 code (i.e. "only" a couple errors per KLOC), llvm can not at all (i.e. 
there is no hope).

Original comment by a...@phicode.de on 28 Sep 2014 at 9:16

> Come on. It costs you *nothing*.

this is wrong, it would cost us a lot. the plan 9 file systems are case 
sensitive. you are using a crippled file system on another os. the problem is 
not with plan 9, the problem is that you are using a case-insensitive file 
system. as aiju pointed out, all you have to do is turn on case-sensitivity in 
your file system. it costs you nothing and it requires no changes to plan 9.

Original comment by stanley....@gmail.com on 28 Sep 2014 at 9:26

> Just set your OS to case sensitive, as it should be. Next, people will demand 
8.3 compatible file names so that they compile on DOS.

That's the slippery slope fallacy, and it's wrong. There's a huge difference 
between renaming 10 files, and forcing DOS compatibility on the entire 
repository. DOS is a 30 year old system, and demanding that Plan 9 be--not only 
cloneable--but *COMPILABLE* on DOS is a completely unreasonable request.

As it stands, I can't even view the source on OS X except through the Google 
Code source browser, because 10 files have similar names. It's not unreasonable 
to avoid case collisions, or allow the repository to be checked out on a case 
sensitive filesystem like the current versions of OS X and winblows use. I 
can't even begin to *attempt* to compile Plan 9 using some clever method unless 
you let me check out the source.

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 9:33

> all you have to do is turn on case-sensitivity in your file system
This can't be done for HFS+ without repartitioning, i.e. wiping my HD. And a 
fair amount of OS X software breaks with case sensitivity. I'm not defending 
this, it's just a fact. I have one laptop, and I simply want to clone Plan 9.

> this is wrong, it would cost us a lot. the plan 9 file systems are case 
sensitive. you are using a crippled file system on another os.
No it wouldn't. It would cost nothing more than renaming 10 files (or removing 
any that are extraneous). This isn't about dropping case-sensitivity at all. 
This is merely allowing the repo to be *viewed* on case sensitive systems.

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 9:44

And 9/10 of these conflicts are between identical files:

`abort: case-folding collision between sys/lib/postscript/troff/Hx and 
sys/lib/postscript/troff/HX`
`abort: case-folding collision between sys/lib/troff/font/devutf/Hb and 
sys/lib/troff/font/devutf/HB`
`abort: case-folding collision between sys/lib/troff/font/devutf/Hi and 
sys/lib/troff/font/devutf/HI`
`abort: case-folding collision between sys/lib/troff/font/devutf/Hx and 
sys/lib/troff/font/devutf/HX`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/lH and 
sys/lib/troff/font/devutf/charlib/LH`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/rc and 
sys/lib/troff/font/devutf/charlib/RC`
`abort: case-folding collision between sys/lib/troff/font/devutf/charlib/rh and 
sys/lib/troff/font/devutf/charlib/rH`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c1 
and sys/src/cmd/postscript/devpost.add/C1`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c2 
and sys/src/cmd/postscript/devpost.add/C2`
`abort: case-folding collision between sys/src/cmd/postscript/devpost.add/c3 
and sys/src/cmd/postscript/devpost.add/C3`

Original comment by alexchan...@gmail.com on 28 Sep 2014 at 10:00

alexchandel: this isn't an osx support group. nobody has any interest in making 
changes to plan 9 to support doing [who knows what] to its files on an 
unsupported operating system. it's not plan 9's fault you installed your osx 
file system without case sensitivity. just make better choices in the future. 
and get better tools.

Original comment by stanley....@gmail.com on 28 Sep 2014 at 11:00

stanley: I'm not asking for an "osx support group" or any other red herring you 
came up with. The changes I proposed are quite unremarkable, and involve 
removing duplicated files. And they allow the source code to be cloned onto a 
case insensitive filesystem.

You could indulge an interested person with a trivial change allowing them to 
*view* source code, or you could rebuff them from the community with crass 
suggestions to "Get a real computer," or join "an osx support group," or "just 
make better choices in the future" and install "your osx file system without 
case sensitivity." Implying I ever installed this file system, or can format 
this computer's HD.

Original comment by alexchan...@gmail.com on 29 Sep 2014 at 1:08

> abort: case-folding collision between rc/bin/kill and rc/bin/Kill

you're asking for more than just removing duplicate files. you're asking to 
restrict plan 9 file systems to case-insensitive behavior because you want to 
hg clone the 9front repo onto a case-insensitive file system. we don't support 
hg clone of the 9front repo onto case-insensitive file systems. it's really 
that simple. you've dug up an example of duplicate files that probably 
shouldn't exist, but you're now ignoring your own other examples such as Kill 
vs kill where the conflict is not caused by useless duplicates. how do you 
propose to address the Kill vs kill conflict?

thanks for filing all these bug reports, but nobody here is getting paid to 
indulge interested persons. or to validate your complaints, no matter how many 
times you repeat them.

Original comment by stanley....@gmail.com on 29 Sep 2014 at 1:18

this is not just duplicated files. you need to change
tr2post and come up with a mangeling scheme. and stuff
doesnt stop here.
the problem is that mercurial cannot unpack
with these collisions. tho it goes to great
lengths mangeling the filenames of the repository
revlogs. maybe they'll fix this or provide an option
at some point. but nobody is going and make the 9front
tree macosx compliant. it is just too much trouble.
if you want access to the source, you could just
take it from the iso. it contains *everything*
unpacked already.

Original comment by cinap_le...@felloff.net on 29 Sep 2014 at 1:53

> you're asking to restrict plan 9 file systems to case-insensitive behavior
No, I wasn't. Saying it multiple times doesn't make it true.

> this is not just duplicated files. you need to change tr2post and come up 
with a mangeling scheme.
cinap: Thank you for actually explaining the issue.

Inspired by the ISO suggestion, I created a case-sensitive disk image and 
cloned the repo into that. Problem solved. This is probably a good suggestion 
for future users with this problem.

Original comment by alexchan...@gmail.com on 2 Oct 2014 at 7:58

Another solution if you only have one computer is to just install 9front in a 
VM. Then not only can you look at the code, but you can compile and run it 
easily.

Original comment by 23h...@gmail.com on 2 Oct 2014 at 8:17

Plan 9 is about 10 years older than OS X. More than that, Plan 9 was designed 
with little to no concern for the norms and standards of Unix as it existed 
outside Bell Labs. It's just not like any unix or even any other OS; in places 
it takes approaches to problems which surprise most everyone. You're not going 
to get much out of it by just looking at the code. 

I'd second hiro's suggestion; install it in a VM where you can both try it and 
look at the code. Plan 9's plumber makes it simple to open files listed by ls 
or from the output of grep where the editor will jump to the line number given 
by grep. Plan 9's coding style makes it easy to find function definitions: grep 
-n '^funcname\(' *.c

If you really only want to look at the code without getting in so deep, I 
suggest looking at plan9port instead, it's developed on OS X.

Original comment by tereniao...@gmail.com on 2 Oct 2014 at 8:38

For the record:

Those files are present *for good reason* and this is not a problem.  They will 
not ever be removed or renamed.  

Original comment by k...@sciops.net on 2 Oct 2014 at 9:05

  • Added labels: Subsystem-Games