Merge branch '@all-for-repos' into wildrepos

Conflicts:
	src/gl-compile-conf
This commit is contained in:
Sitaram Chamarty 2009-12-21 23:02:02 +05:30
commit 203d5690be
4 changed files with 64 additions and 28 deletions

View file

@ -106,6 +106,14 @@ repo gitolite
repo @oss_repos repo @oss_repos
R = @all R = @all
# set permissions to all already defined repos
# (a repository is defined if it has permission rules
# associated, empty "repo" stanza or "@group=..." line is
# not enough). *Please* do see doc/3-faq-tips-etc.mkd for
# some important notes on this feature
repo @all
RW+ = @admins
# ADVANCED PERMISSIONS USING REFEXES # ADVANCED PERMISSIONS USING REFEXES
# - refexes are specified in perl regex syntax # - refexes are specified in perl regex syntax

View file

@ -5,6 +5,10 @@ In this document:
* common errors and mistakes * common errors and mistakes
* git version dependency * git version dependency
* other errors, warnings, notes... * other errors, warnings, notes...
* ssh-copy-id
* cloning an empty repo
* `@all` syntax for repos
* umask setting
* getting a tar file from a clone * getting a tar file from a clone
* differences from gitosis * differences from gitosis
* simpler syntax * simpler syntax
@ -77,38 +81,58 @@ normal way, since it's not empty anymore.
### other errors, warnings, notes... ### other errors, warnings, notes...
* don't have `ssh-copy-id`? This is broadly what that command does, if you #### ssh-copy-id
want to replicate it manually. The input is your pubkey, typically
`~/.ssh/id_rsa.pub` from your client/workstation.
* it copies it to the server as some file don't have `ssh-copy-id`? This is broadly what that command does, if you want
to replicate it manually. The input is your pubkey, typically
`~/.ssh/id_rsa.pub` from your client/workstation.
* it appends that file to `~/.ssh/authorized_keys` on the server * it copies it to the server as some file
(creating it if it doesn't already exist)
* it then makes sure that all these files/directories have go-w perms * it appends that file to `~/.ssh/authorized_keys` on the server
set (assuming user is "git"): (creating it if it doesn't already exist)
/home/git/.ssh/authorized_keys * it then makes sure that all these files/directories have go-w perms
/home/git/.ssh set (assuming user is "git"):
/home/git
[Actually, sshd requires that even directories *above* ~ (/, /home, /home/git/.ssh/authorized_keys
typically) also must be `go-w`, but that needs root. And typically /home/git/.ssh
they're already set that way anyway. (Or if they're not, you've got /home/git
bigger problems than gitolite install not working!)]
* cloning an empty repo is only possible with clients greater than 1.6.2. [Actually, sshd requires that even directories *above* ~ (/, /home,
So at least one of your clients needs to have a recent git. Once at least typically) also must be `go-w`, but that needs root. And typically
one commit has been made, older clients can also use it they're already set that way anyway. (Or if they're not, you've got
bigger problems than gitolite install not working!)]
* when you clone an empty repo, git seems to complain about `fatal: The #### cloning an empty repo
remote end hung up unexpectedly`. However, you can ignore this, since it
doesn't seem to hurt anything. [Update 2009-09-14; this has been fixed in
git 1.6.4.3]
* gitweb not able to read your repos? You can change the umask for newly Cloning an empty repo is only possible with clients greater than 1.6.2. So at
created repos to something more relaxed -- see the `~/.gitolite.rc` file least one of your clients needs to have a recent git. Once at least one
commit has been made, older clients can also use it
When you clone an empty repo, git seems to complain about `fatal: The remote
end hung up unexpectedly`. However, you can ignore this, since it doesn't
seem to hurt anything. [Update 2009-09-14; this has been fixed in git
1.6.4.3]
#### `@all` syntax for repos
There *is* a way to use the `@all` syntax for repos also, as described in
`conf/example.conf`. However, there is an important difference between this
and the old `@all` (for users):
* `@all` for repos is immediately expanded, when found, into the currently
known list of repos. "Currently" means upto this point in the config
file, and "known" means having some user with some permissions associated
with the repo!
* This means that if you really want *all* repos, you'd better put this para
at the **end** of the config file!
#### umask setting
Gitweb not able to read your repos? You can change the umask for newly
created repos to something more relaxed -- see the `~/.gitolite.rc` file
### getting a tar file from a clone ### getting a tar file from a clone

View file

@ -148,8 +148,9 @@ Here's how it all hangs together.
Luckily, ssh has a very convenient way of capturing all the connection Luckily, ssh has a very convenient way of capturing all the connection
information (username, hostname, port number (if it's not the default 22), information (username, hostname, port number (if it's not the default 22),
and keypair to be used) in one "paragraph". This is what the para looks and keypair to be used) in one "paragraph" of `~/.ssh/config`. This is
like for us (the easy install script puts it there the first time): what the para looks like for us (the easy install script puts it there the
first time):
host gitolite host gitolite
user git user git

View file

@ -193,8 +193,11 @@ sub parse_conf_file
{ {
# grab the list and expand any @stuff in it # grab the list and expand any @stuff in it
@repos = split ' ', $1; @repos = split ' ', $1;
@repos = expand_list ( @repos ); if (@repos == 1 and $repos[0] eq '@all') {
@repos = keys %repos;
} else {
@repos = expand_list ( @repos );
}
s/\bCREAT[EO]R\b/\$creater/g for @repos; s/\bCREAT[EO]R\b/\$creater/g for @repos;
} }
# actual permission line # actual permission line