#!/usr/bin/perl
use strict;
use warnings;

use lib $ENV{GL_LIBDIR};
use Gitolite::Easy;

=for usage
Usage:    ssh git@host desc <repo>
          ssh git@host desc <repo> <description string>

Show or set description for repo.  You need to have write access to the repo
and the 'writer-is-owner' option must be set for the repo, or it must be a
user-created ('wild') repo and you must be the owner.
=cut

usage() if not @ARGV or @ARGV < 1 or $ARGV[0] eq '-h';

my $repo = shift;
my $text = join( " ", @ARGV );
my $file = 'description';

#<<<
_die "you are not authorized" unless
    ( not $text and can_read($repo) )   or
    (     $text and owns($repo) )       or
    (     $text and can_write($repo)    and ( $rc{WRITER_CAN_UPDATE_DESC} or option( $repo, 'writer-is-owner' ) ) );
#>>>

$text
  ? textfile( file => $file, repo => $repo, text => $text )
  : print textfile( file => $file, repo => $repo );

__END__

kernel.org needs 'desc' to be available to people who have "RW" or above, not
just the "creator".  In fact they need it for non-wild repos so there *is* no
creator.  To accommodate this, we created the WRITER_CAN_UPDATE_DESC rc
variable.

However, that has turned out to be a bit of a blunt instrument for people with
different types of wild repos -- they don't want to apply this to all of them.
It seems easier to do this as an option, so you may have it for one set of
"repo ..." and not have it for others.  And if you want it for the whole
system you'd just put it under "repo @all".

The new 'writer-is-owner' option is meant to cover desc, readme, and any other
repo-specific text file, so it's also a blunt instrument, though in a
different dimension :-)
