Это должно сработать, благодаря ценным данным @Socowi:
while read -r f1 f2 #store values of each row for first column and second
do
mkdir "dir${f2}" #makes directory with the name
mv ${f1}.* "dir${f2}/" #moves all the files with the class name to that directory
done < <(tail +2 file.csv) #reads file line by line except first
PS file.csv - это файл, содержащий классы, их имена и т. Д., Количество файлов не имеет значения.
Хм, как я понял из githooks (5)
, ловушка pre-receive
получает обновленные ссылки на stdin
.
#!/bin/sh
while read old new name; do
email=$(git log -1 --pretty=format:%ae $new)
# check email
done
Вам необходимо проверить адреса электронной почты (может быть более одной строки данных) и соответствующим образом выйти из сценария, например, , выйти 0
для успеха и, например, выйти 1 [1111572. ] за неудачу.
OK, we managed to get the job done, Bombe's reply above helped a lot. This is how it was done:
hooks/pre-receive
#!/usr/bin/perl
my $user = $ENV{'GITOSIS_USER'};
if ($user !~ m/^[^@]+@[^@]+$/ ) {
print STDERR "Unknown user. Not running under Gitosis?\n";
exit 1;
}
my $fail = 0;
while(<STDIN>) {
if (m/^([0-9a-f]+)\s+([0-9a-f]+)\s+(\S+)$/) {
my $oldver = $1;
my $curver = $2;
my $ref = $3;
my $ret = open (FH, "-|", "git", "rev-list", '--pretty=format:%H:%ae:%ce',$
if ($ret) {
# great and less brakets hidden in HTML: >FH<
while (<FH>) {
chomp;
my $line = $_;
if ($_ !~ m/commit /) {
my ($rev, $author, $committer) = split(":", $line);
if ( $author ne $user && $committer ne $user ) {
print STDERR "Unauthorized commit: $rev\n";
$fail++;
}
}
}
}
}
}
if ($fail) {
exit 1;
}
exit 0;
This means the user name has to be the same as the one used to create the ssh key for gitosis key ring.
Добавление os.environ ['WHATVER_USER'] = пользователь в ~ строке 202 в serve.py должен сделать свое дело ...
Этот скрипт не работает по нескольким причинам. Сначала обрезается линия open (). После того, как я исправил это, сценарий вошел в бесконечный цикл при первом while (), даже не пытаясь вызвать git-rev-list.
С небольшой помощью моих друзей мне удалось немного его улучшить:
hooks / pre-receive
#!/usr/bin/perl
my $user = $ENV{'GITOSIS_USER'};
if ($user !~ m/^[^@]+@[^@]+$/ ) {
print STDERR "Unknown user. Not running under Gitosis?\n";
exit 1;
}
my $fail = 0;
while(<STDIN>) {
if (m/^([0-9a-f]+)\s+([0-9a-f]+)\s+(\S+)$/) {
my $oldver = $1;
my $curver = $2;
my $ref = $3;
my $ret = open (FH, "-|", "git", "rev-list", '-- pretty=format:%H:%ae:%ce',"$oldver..$curver");
if ($ret) {
while (<FH>) {
chomp;
my $line = $_;
if ($_ !~ m/commit /) {
my ($rev, $author, $committer) = split(":", $line);
if ( $author ne $user && $committer ne $user ) {
print STDERR "Unauthorized commit: $rev\n";
print STDERR "You must specify Author and Committer.\n";
print STDERR "Specified a/c: $author / $committer\n";
print STDERR "Expected user: $user\n";
$fail++;
}
}
}
}
}
}
if ($fail) {
exit 1;
}
exit 0;