From da6e245112270694be287e0aa019fc44d3486f7f Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Wed, 20 Apr 2011 21:11:42 -0700 Subject: Better handling for empty config entries. --- libpiny/lib/Piny/Config.pm | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/Config.pm b/libpiny/lib/Piny/Config.pm index 718af5c..7ba1fd5 100644 --- a/libpiny/lib/Piny/Config.pm +++ b/libpiny/lib/Piny/Config.pm @@ -107,6 +107,10 @@ sub _build__conf { }; + foreach my $key ( keys %$conf ) { + $conf->{$key} = "" unless defined $conf->{$key}; + }; + return $conf; }; -- cgit v1.2.3 From babfac96492ef68d51110f6dd5f74eb7362070b8 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Wed, 20 Apr 2011 21:11:57 -0700 Subject: Backend support for user configs. --- libpiny/lib/Piny/Config.pm | 4 ++++ libpiny/lib/Piny/User.pm | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/Config.pm b/libpiny/lib/Piny/Config.pm index 7ba1fd5..535df33 100644 --- a/libpiny/lib/Piny/Config.pm +++ b/libpiny/lib/Piny/Config.pm @@ -208,6 +208,7 @@ sub tweakable { # The tweakables +# Repo-specific tweakables, in the repos' .git/config files. tweakable "piny_ikiwikidestdir" => "/srv/www/piny.be/", 'PathDir'; tweakable "piny_ikiwikisrcdir" => "/srv/ikiwiki/", 'PathDir'; tweakable "piny_ikiwikiurl" => "http://piny.be/", 'HttpUrl'; @@ -215,6 +216,9 @@ tweakable "piny_ikiwikisecureurl" => "https://secure.piny.be/", 'HttpsUrl' tweakable "piny_ikiwikisecurepath" => "/srv/www/secure.piny.be/", 'PathDir'; tweakable "receive_denynonfastforwards" => "true", 'GitBool'; +# User-specific tweakables, in the users' ~/.gitconfig files. +tweakable "user_email" => undef, 'Maybe[Str]'; + # Moose boilerplate __PACKAGE__->meta->make_immutable; diff --git a/libpiny/lib/Piny/User.pm b/libpiny/lib/Piny/User.pm index 6267ecb..aa01ba7 100644 --- a/libpiny/lib/Piny/User.pm +++ b/libpiny/lib/Piny/User.pm @@ -10,6 +10,7 @@ use Moose; use Moose::Util::TypeConstraints; use MooseX::StrictConstructor; +use Piny::Config; use Piny::Email; use Piny::Group; @@ -49,6 +50,20 @@ has 'password_hash' => , init_arg => undef ); +has 'home' => + ( is => 'ro' + , isa => 'Path' + , lazy_build => 1 + , init_arg => undef + ); + +has 'config' => + ( is => 'ro' + , isa => 'Piny::Config' + , lazy_build => 1 + , init_arg => undef + ); + has 'email' => ( is => 'ro' , isa => 'Piny::Email' @@ -180,10 +195,26 @@ sub _build_password_hash { return $s->pwent( )->[1]; }; +sub _build_home { + my ( $s ) = @_; + + return $s->pwent( )->[7]; +}; + +sub _build_config { + my ( $s ) = @_; + + return Piny::Config->new( confpath => $s->home . "/.gitconfig" ); +}; + sub _build_email { my ( $s ) = @_; - return Piny::Email->new( address => $s->pwent( )->[6] ); + if ( not defined $s->config->user_email ) { + die "You must provide a user.email attribute in your .gitconfig!"; + }; + + return Piny::Email->new( address => $s->config->user_email ); }; sub _build_groups { -- cgit v1.2.3 From f14aee049e7363e40dd817691aa8fb64c2f450e1 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Wed, 20 Apr 2011 21:13:01 -0700 Subject: Revert "Attempt to fix parsing of empty strings in config options" This reverts commit f6f2473d1a32f23c56148cb032a29734d35cdc00. --- libpiny/lib/Piny/Config.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/Config.pm b/libpiny/lib/Piny/Config.pm index 30bb052..535df33 100644 --- a/libpiny/lib/Piny/Config.pm +++ b/libpiny/lib/Piny/Config.pm @@ -55,7 +55,7 @@ has 'confpath' => has '_conf' => ( is => 'ro' - , isa => 'HashRef[Maybe[Str]]' + , isa => 'HashRef[Str]' , lazy_build => 1 , clearer => 'clear_conf' , init_arg => undef -- cgit v1.2.3 From b5609ce3f6b3d40f1fc55e8bedc66e50fcf3f686 Mon Sep 17 00:00:00 2001 From: "jrayhawk+piny.be@omgwallhack.org" Date: Wed, 20 Apr 2011 22:19:33 -0700 Subject: Robustifying rebuildrepo to tolerate foreign-created repositories somewhat better. --- libpiny/lib/Piny/Repo.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/Repo.pm b/libpiny/lib/Piny/Repo.pm index 17142ed..7818463 100644 --- a/libpiny/lib/Piny/Repo.pm +++ b/libpiny/lib/Piny/Repo.pm @@ -203,6 +203,17 @@ sub has_access { sub rebuild { my ( $s ) = @_; + unless( getgrnam("git-" . $s->name ) ) { + system( "/usr/sbin/addgroup", "--quiet", "git-" . $s->name ) and die "Could not create repo group!"; + system( "/usr/sbin/adduser", "--quiet", $s->owner->name, "git-" . $s->name ) and die "Could not add you to the repo group!"; + system( "/usr/sbin/adduser", "--quiet", "ikiwiki-" . $s->name, "git-" . $s->name ) and print "...But that's probably okay.\n"; + }; + + unless( getpwnam("ikiwiki-" . $s->name ) ) { + system( "/usr/sbin/adduser", "--quiet", "--system", "--group", "--gecos", $s->name, "ikiwiki-" . $s->name ) and die "Could not create ikiwiki user!"; + system( "/usr/sbin/adduser", "--quiet", "ikiwiki-" . $s->name, "git-" . $s->name ) and die "Could not add ikiwiki user to the repo group!"; + }; + my $ikiuser = Piny::User::IkiWiki->new( "name" => "ikiwiki-" . $s->name ); foreach( "git-daemon-export-ok", "packed-refs" ) { @@ -210,7 +221,7 @@ sub rebuild { close( TOUCH ); }; - foreach( "info", "logs" ) { + foreach( "info", "logs", "branches" ) { (-e $s->path . "/" . $_) or mkdir( $s->path . "/" . $_ ) or die "Could not mkdir $_ for repo: $!"; }; @@ -226,7 +237,12 @@ sub rebuild { print SETUP $s->ikiwiki_setup; close( SETUP ) or die "Could not close new ikiwiki setup file: $!"; - system( "/bin/chown", "-R", $ikiuser->name . "." . $ikiuser->name, $s->ikiwiki_srcdir, $s->ikiwiki_destdir, $s->secure_path ) and die "Could not change ownership of ikiwiki directories!"; + system( "/usr/bin/git", "clone", "--quiet", $s->path, $s->ikiwiki_srcdir ) and die "Could not clone repo to ikiwiki srcdir!"; + + foreach( $ikiuser->name, $s->ikiwiki_srcdir, $s->ikiwiki_destdir, $s->secure_path ) { + unless( -d $_ ) { mkdir( $_ ) }; + system( "/bin/chown", "-R", $ikiuser->name . ".", $_ ) and die "Could not change ownership of ikiwiki directories!"; + }; open( WIKILIST, ">", "/etc/ikiwiki/wikilist.d/" . $s->name ) or die "Could not create wikilist.d file: $!"; print WIKILIST $ikiuser->name . " /etc/ikiwiki/piny/" . $s->name . ".setup\n"; -- cgit v1.2.3 From 156639106697e3ed028e7a6df1bc6dc6d4a47b1c Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Wed, 20 Apr 2011 22:28:13 -0700 Subject: joe is a whiny baby who wants a better error message. --- libpiny/lib/Piny/User.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/User.pm b/libpiny/lib/Piny/User.pm index aa01ba7..780a698 100644 --- a/libpiny/lib/Piny/User.pm +++ b/libpiny/lib/Piny/User.pm @@ -211,7 +211,7 @@ sub _build_email { my ( $s ) = @_; if ( not defined $s->config->user_email ) { - die "You must provide a user.email attribute in your .gitconfig!"; + die "You must provide a user.email attribute in your .gitconfig!\nPlease run pinyconfig --user user.email your\@email.com"; }; return Piny::Email->new( address => $s->config->user_email ); -- cgit v1.2.3 From 43e46e947e0fda3e768302354e29d004da4a061b Mon Sep 17 00:00:00 2001 From: "jrayhawk+piny.be@omgwallhack.org" Date: Wed, 20 Apr 2011 22:37:34 -0700 Subject: Fix rebuildrepo to work with existing Ikiwiki directories. --- libpiny/lib/Piny/Repo.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libpiny/lib/Piny') diff --git a/libpiny/lib/Piny/Repo.pm b/libpiny/lib/Piny/Repo.pm index 7818463..cfa73bd 100644 --- a/libpiny/lib/Piny/Repo.pm +++ b/libpiny/lib/Piny/Repo.pm @@ -237,7 +237,9 @@ sub rebuild { print SETUP $s->ikiwiki_setup; close( SETUP ) or die "Could not close new ikiwiki setup file: $!"; - system( "/usr/bin/git", "clone", "--quiet", $s->path, $s->ikiwiki_srcdir ) and die "Could not clone repo to ikiwiki srcdir!"; + unless( -d $s->ikiwiki_srcdir ) { + system( "/usr/bin/git", "clone", "--quiet", $s->path, $s->ikiwiki_srcdir ) and die "Could not clone repo to ikiwiki srcdir!"; + }; foreach( $ikiuser->name, $s->ikiwiki_srcdir, $s->ikiwiki_destdir, $s->secure_path ) { unless( -d $_ ) { mkdir( $_ ) }; -- cgit v1.2.3