On Tue, Sep 11, 2007 at 10:55:20PM +0300, Led wrote: > 2007/9/11, Alexey Tourbin : > > On Tue, Sep 11, 2007 at 08:27:50PM +0300, Led wrote: > > > Это серьёзно перелопачивать shell-скрипты, которых может быть в паукете "не > > > один" и "немаленький". В этом случае разговор о поиске > > > exec ... > > > > Увы, бывают действительно "кривоватые" скрипты, да и не совсем > > кривоватые, в которых поиск зависимостей дает слишком много результатов. > > Всё же стоит попытаться выяснить, много ли там перелопачивать или нет. > > Бывают и "кривоватие"... Но, всё же, переделывать > /usr/bin/foo > на > FOO=/usr/bin/foo > $FOO > ? > ИМХО это не исправление "кривостей", а "расстановка костылей" (?) Увы, я тоже смотрю на это как на расстановку костылей. С другой стороны, так можно договориться до того, что нужно похерить всю идею автоматического поиска зависимостей -- просто потому, что существуют условные зависимости. Они существуют не только в шелле, но и в других интепретируемых языках. Просто в шелле с ними сложнее бороться. В некоторых случаях очень тяжело сказать, стоит ли расставлять костыли, или проще отключить поиск зависимостей в конкретном файле. См. напр. git.git v1.5.1.1-113-g6fcc309 (ниже целиком). Но отключить поиск зависимостей в отдельно взятом файле, если сыскалась паршивая овца, вполне себе можно: %add_findreq_skiplist %_bindir/овца К сожалению, пока нет способа игнорировать сами зависимости определенного вида. commit 6fcc3098dc58239f3437779740efee7a5c87ae20 Author: Dmitry V. Levin Date: Thu Apr 12 13:26:49 2007 +0000 git-mergetool.sh: Protect merge tool names from "sh --find-requires" diff --git a/git-mergetool.sh b/git-mergetool.sh index e62351b..4db2a80 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -191,10 +191,10 @@ merge_file () { case "$merge_tool" in kdiff3) if base_present ; then - (kdiff3 --auto --L1 "$path (Base)" -L2 "$path (Local)" --L3 "$path (Remote)" \ + ($merge_tool --auto --L1 "$path (Base)" -L2 "$path (Local)" --L3 "$path (Remote)" \ -o "$path" -- "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1) else - (kdiff3 --auto -L1 "$path (Local)" --L2 "$path (Remote)" \ + ($merge_tool --auto -L1 "$path (Local)" --L2 "$path (Remote)" \ -o "$path" -- "$LOCAL" "$REMOTE" > /dev/null 2>&1) fi status=$? @@ -202,9 +202,9 @@ merge_file () { ;; tkdiff) if base_present ; then - tkdiff -a "$BASE" -o "$path" -- "$LOCAL" "$REMOTE" + $merge_tool -a "$BASE" -o "$path" -- "$LOCAL" "$REMOTE" else - tkdiff -o "$path" -- "$LOCAL" "$REMOTE" + $merge_tool -o "$path" -- "$LOCAL" "$REMOTE" fi status=$? save_backup @@ -218,13 +218,13 @@ merge_file () { xxdiff) touch "$BACKUP" if base_present ; then - xxdiff -X --show-merged-pane \ + $merge_tool -X --show-merged-pane \ -R 'Accel.SaveAsMerged: "Ctrl-S"' \ -R 'Accel.Search: "Ctrl+F"' \ -R 'Accel.SearchForward: "Ctrl-G"' \ --merged-file "$path" -- "$LOCAL" "$BASE" "$REMOTE" else - xxdiff -X --show-merged-pane \ + $merge_tool -X --show-merged-pane \ -R 'Accel.SaveAsMerged: "Ctrl-S"' \ -R 'Accel.Search: "Ctrl+F"' \ -R 'Accel.SearchForward: "Ctrl-G"' \ @@ -236,18 +236,18 @@ merge_file () { opendiff) touch "$BACKUP" if base_present; then - opendiff "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$path" | cat + $merge_tool "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$path" | cat else - opendiff "$LOCAL" "$REMOTE" -merge "$path" | cat + $merge_tool "$LOCAL" "$REMOTE" -merge "$path" | cat fi check_unchanged save_backup ;; - emerge) + emacs) if base_present ; then - emacs -f emerge-files-with-ancestor-command "$LOCAL" "$REMOTE" "$BASE" "$path" + $merge_tool -f emerge-files-with-ancestor-command "$LOCAL" "$REMOTE" "$BASE" "$path" else - emacs -f emerge-files-command "$LOCAL" "$REMOTE" "$path" + $merge_tool -f emerge-files-command "$LOCAL" "$REMOTE" "$path" fi status=$? save_backup @@ -293,8 +293,11 @@ done if test -z "$merge_tool"; then merge_tool=`git-config merge.tool` case "$merge_tool" in - kdiff3 | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | "") + kdiff3 | tkdiff | xxdiff | meld | opendiff | emacs | vimdiff | "") ;; # happy + emerge) + merge_tool=emacs + ;; *) echo >&2 "git config option merge.tool set to unknown tool: $merge_tool" echo >&2 "Resetting to default..." @@ -305,7 +308,7 @@ fi if test -z "$merge_tool" ; then if type kdiff3 >/dev/null 2>&1 && test -n "$DISPLAY"; then - merge_tool="kdiff3"; + merge_tool=kdiff3 elif type tkdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then merge_tool=tkdiff elif type xxdiff >/dev/null 2>&1 && test -n "$DISPLAY"; then @@ -315,7 +318,7 @@ if test -z "$merge_tool" ; then elif type opendiff >/dev/null 2>&1; then merge_tool=opendiff elif type emacs >/dev/null 2>&1; then - merge_tool=emerge + merge_tool=emacs elif type vimdiff >/dev/null 2>&1; then merge_tool=vimdiff else @@ -325,18 +328,12 @@ if test -z "$merge_tool" ; then fi case "$merge_tool" in - kdiff3|tkdiff|meld|xxdiff|vimdiff|opendiff) + emacs|kdiff3|meld|opendiff|tkdiff|vimdiff|xxdiff) if ! type "$merge_tool" > /dev/null 2>&1; then echo "The merge tool $merge_tool is not available" exit 1 fi ;; - emerge) - if ! type "emacs" > /dev/null 2>&1; then - echo "Emacs is not available" - exit 1 - fi - ;; *) echo "Unknown merge tool: $merge_tool" exit 1