svn diff through perltidy



我想在我的subversion工作副本中寻找diff之前运行perltidy。在SVN配置中我写:

diff-cmd = /usr/bin/d.sh

正如David W在这个答案https://stackoverflow.com/a/5834900/1927848中所说,我制作了一个脚本/usr/bin/d.sh:

#!/usr/local/bin/bash
/usr/local/bin/perltidy "$1" > "/tmp/$1"
/usr/local/bin/perltidy "$2" > "/tmp/$2"
/usr/bin/diff "$1" "$2"
/bin/rm "/tmp/$1" "/tmp/$2"
exit 0

,当我在工作副本中设置SVN diff时,我得到了一些错误:

dev# svn diff
Index: nodeny/new_month.pl
===================================================================
Unknown option: u
Error on command line; for help try 'perltidy -h'
Option l is ambiguous (libpods, line-up-parentheses, logfile, logfile-gap, long-block-line-count, look-for-autoloader, look-for-hash-bang, look-for-selfloader)
Error on command line; for help try 'perltidy -h'
diff: option requires an argument -- L
/usr/bin/diff: Try `/usr/bin/diff --help' for more information.

我的错误在哪里?

UPD: $1和$2不是文件名,$6和$7包含文件名。我对代码做了一些修改,感谢ikegami注释

#!/usr/local/bin/bash
/usr/local/bin/perltidy "$6" -st > "/tmp/tidy001"
/usr/local/bin/perltidy "$7" -st > "/tmp/tidy002"
/usr/bin/diff "/tmp/tidy001" "/tmp/tidy002"
/bin/rm "/tmp/tidy001" "/tmp/tidy002"
exit 0

但是现在脚本只执行第一个perltidy命令,然后等待…什么错了吗?
UPD2: perl脚本,那工作:

#!/usr/bin/perl
use Text::Diff;
if (-e $ARGV[-2] && -e $ARGV[-1]) {
    my $str1 = `/usr/local/bin/perltidy -npro -pbp -nst -se -et=4 -bar -l=200 $ARGV[-2] -st`;
    my $str2 = `/usr/local/bin/perltidy -npro -pbp -nst -se -et=4 -bar -l=200 $ARGV[-1] -st`;
    my $diff = diff($str1, $str2);
    print $diff;
}
else {
    print "Error file $ARGV[-2] or $ARGV[-1] not existsn";
}
exit 0;

我不是一个有经验的bash代码,所以下面可能不是最优的,特别是考虑到冗余,但它通过假设最后两个参数是文件名来解决您的问题。

#!/bin/bash
args=("$@")
f1_idx=$(( ${#args[@]} - 2 ))
f1="${args[$f1_idx]}"
/usr/local/bin/perltidy "$f1" -st > "/tmp/$f1"
args[$f1_idx]="/tmp/$f1"
f2_idx=$(( ${#args[@]} - 1 ))
f2="${args[$f2_idx]}"
/usr/local/bin/perltidy "$f2" -st > "/tmp/$f2"
args[$f2_idx]="/tmp/$f2"
/usr/bin/diff "$args[@]"
/bin/rm "/tmp/$f1" "/tmp/$f2"
exit 0

或者,如果您不关心实际的文件名(正如您的更新所暗示的那样),您可以完全避免使用临时文件。

#!/bin/bash
args=("$@")
last_idx=$(( ${#args[@]} - 1 ))
f2="${args[$last_idx]}"
unset args[$last_idx]
last_idx=$(( ${#args[@]} - 1 ))
f1="${args[$last_idx]}"
unset args[$last_idx]
/usr/bin/diff "$args[@]" 
   <( /usr/local/bin/perltidy "$f1" -st ) 
   <( /usr/local/bin/perltidy "$f2" -st )
exit 0

相关内容

  • 没有找到相关文章

最新更新