なぜなら
svn status -q | gawk "{ print $2 }"
が My の部分で見事に切れる。だが、
svn status -q | gawk "{ $1 = \"\" ; print $0 }"
以上のように $1 をつぶしてやるという方法もあるのだ。覚えておこうな!>未来の自分
未来の自分より
これ、$1 と $2 の間の空白が残っているし、My Project と空白が含まれている限りは二重引用符で囲まないといけないなど、諸々課題が残ってた。
実際、たとえば DATABASE というワードを含んだパスだけを commit しようとするならば、
svn status -q | gawk "/DATABASE/{ $1=\"\" ; printf \"%c%s%c\n\",34,substr($0,2),34}" | clip
でクリップボードにコピーしてから svn commit
+ Ctrl-Y とせざるを得なかった。
本当は nyagos の逆クォートを使って
svn commit `svn status -q | gawk "/DATABASE/{ $1=\"\" ; printf \"%c%s%c\n\",34,substr($0,2),34}"`
とやりたいところだが、これだと何故か二重引用符が消えてしまう。うーん
さらに未来の自分より
二重引用符が消えてしまうのは、nyagos 側の引用機能が機能文字である二重引用符を無効化していなかったのが原因だった。
ということで修正
diff --git a/nyagos.d/backquote.lua b/nyagos.d/backquote.lua index bc5fa92..f3d1398 100644 --- a/nyagos.d/backquote.lua +++ b/nyagos.d/backquote.lua @@ -12,7 +12,7 @@ backquote = { return false end r = nyagos.atou(r) - r = string.gsub(r,'[|&<>!]',function(m) + r = string.gsub(r,'["|&<>!]',function(m) return string.format('%%u+%04X%%',string.byte(m,1,1)) end) return string.gsub(r,'%s+$','')
追々々記
ということで、めでたく
svn commit $(svn status -q | gawk "/DATABASE/{ gsub(/^[^ ]+[ \t]*/,\"\");print \"\x22\" $0 \"\x22\" }" | type)
は nyagos 的には動くようになった(最後の type は nyagos 独自版で ANSI→UTF8変換をさせている。あと $1 を消すのもやめてしまっていて、この記事の存在意義すら失われている)
だが、これ
svn: E020024: Error resolving case of '"(ファイル名)"'
と怒られる。要は svn status が稼働中なのに、svn commit を動かしているからのようだ。プロセスの終了シーケンスが完了していないのかな?
仕方ないので、| clip
でクリップボードに食わせてから、Ctrl-Y しましたわ