2006/11/11

[技術系]   spawn svn

at 10:29JST
 
たとえばこういう、
 指定したディレクトリ以下でsvn updateする
というCGIを適当に作るわけだが、ディレクトリを細かくたどって行って指定できるようにするのを、簡単にできんかね?

Yahoo! UIにそんなウィジェットがあった気がするけど、結局こちら側でJSONかなんかでパス情報を与えてあげなきゃいけないわけでしょ。めんどくさいし、そこまでするようなフロントエンドじゃないからやめた。
#!/usr/bin/perl

# 日本語EUC, LF
# 要SuEXEC指定

$|=1;

our $responseHeader = 0;
sub Say {
print "Content-Type: text/html; charset=EUC-JP\n\n"
if ( !$responseHeader );
$responseHeader++;
print join( '', @_ );
}

our %targets;
while ( <DATA> ) {
s/\s//g;
next if ( /^$/ );
$targets{ $_ } = 1;
}

our $URL_HOST =
'http://' .
(
( $ENV{'HTTP_HOST'} ne '' ) ?
$ENV{'HTTP_HOST'} :
$ENV{'SERVER_NAME'}
) .
(
( $ENV{'SERVER_PORT'} != 80 ) ?
":$ENV{'SERVER_PORT'}" :
''
)
;
our $URL_PATH =
$ENV{'SCRIPT_NAME'}
;

our $target = $ENV{ PATH_INFO };
if ( $target ) {
__Exec__AnyTargetGiven();
} else {
__Exec__Default();
}
exit();

sub __Exec__Default {
Say( <<"_HTML_" );
<html>
<head>
<title>spawn svn</title>
</head>
<body>
<h1>spawn svn</h1>
svn updateします。ディレクトリを選んでください
<hr>
<ul>
@{[ do {
my $str;
foreach my $i ( keys %targets ) {
$str .= <<"_LI_";
<li><a
href="$URL_PATH$i"
>$i</a>
_LI_
}
$str;
} ]}
</ul>
<hr>
<a
href="./"
>再読込</a>
</body>
</html>
_HTML_
}

sub __Exec__AnyTargetGiven {
Say( <<"_HTML_" );
<html>
<head>
<title>spawn svn : $target</title>
</head>
<body>
<h1>spawn svn</h1>
ターゲットディレクトリ:$target
<hr>
<pre>
_HTML_
if ( !$targets{ $target } ) {
Say( <<"_HTML_" );
<font color="#ff0000">
そのディレクトリは指定可能ではありません
</font>
_HTML_
} else {
my $cmd = "cd $target && svn update 2>&1";
system( $cmd );
Say( "<b>...完了</b>" );
}
Say( <<"_HTML_" );
</pre>
<hr>
<a
href="$URL_PATH"
>元のページへ</a>
</body>
</html>
_HTML_
}

__DATA__
/var/net/www/hogehoge.jp
/var/net/www/hugahuga.jp



関連しそうな過去記事:
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。