src-cli icon indicating copy to clipboard operation
src-cli copied to clipboard

Support serving bare repositories

Open andir opened this issue 3 years ago • 3 comments

On my Git host I've all the repositories in "bare" format. They have been created using git init --bare $name and thus do not have a .git folder within them. The repositories don't need a full checkout nor a .git folder when being accessed via SSH. Currently serving those repositories doesn't work as the check for .git folder within them fails.

On the filesystem the layout looks like this:

/data
/data/foo.git
/data/bar.git
/data/project1/zes.git
/data/project2/des.git
...

Ideally each of the repositories would appear with their name with the .git suffix stripped (foo, bar, project1/zes, ...).

Is this something you'd like in the upstream code base? I wouldn't mind trying to tackle the issue as the original code seems to have enough test coverage for me to be confident in not breaking stuff on the way.

andir avatar Oct 20 '21 13:10 andir

Hey @andir!

I might be wrong, but it looks to me like src serve-git already supports bare git repositories: https://github.com/sourcegraph/src-cli/blob/3a48ac72cbe0dc31a69400bd6a062f7104fde858/internal/servegit/serve.go#L183-L196

@keegancsmith would know best, though. So, ping :)

mrnugget avatar Oct 20 '21 13:10 mrnugget

That only works if you have a directory named .git within the repos directory. In my case the repository folder is basically the .git folder.

andir avatar Oct 20 '21 13:10 andir

It is difficult to detect a bare git repository generally which is why we rely on the .git convention. You also run into problems on sub repos.

However, saying that we may have something which works enough of the time and is performant: check for a HEAD file and objects dir. I feel like this is an acceptable option.

keegancsmith avatar Oct 20 '21 15:10 keegancsmith