Hey again.
I think I also managed to reproduce the first error:
$ git clone [email protected]:calestyo/btrbk.git
$ cd btrbk
$ git checkout improve-ssh_filter_btrbk.sh
$ git rebase --interactive 53b3290e14ea9c8df6288bec981d8b28655c8fa7
This shows:
pick 9819fdc ssh_filter_btrbk.sh: convert to POSIX sh
pick 3d87f27 ssh_filter_btrbk.sh: use printf instead of echo
pick 2b53311 ssh_filter_btrbk.sh: set only needed directories in PATH
pick ec8e7a1 ssh_filter_btrbk.sh: use more common exit statuses
pick 0bd7374 ssh_filter_btrbk.sh: replace OpenSSH’s deprecated SSH_CLIENT
pick 7c77f0a ssh_filter_btrbk.sh: minor improvements
pick d3126c7 ssh_filter_btrbk.sh: further harden the shell execution environment
pick 7729be4 ssh_filter_btrbk.sh: properly normalise pathnames
pick 016e945 ssh_filter_btrbk.sh: forbid non-absolute pathnames to
--restrict-path
Now delete all lines except for the first:
pick 9819fdc ssh_filter_btrbk.sh: convert to POSIX sh
in order to get rid of all those commits.
Then apply the attached patch (simulating the content that I had
changed) with some of the next upcoming commits:
$ patch < changes.patch
Then:
$ git crecord
and only select the "printf" lines, i.e.:
[~] diff --git a/ssh_filter_btrbk.sh b/ssh_filter_btrbk.sh
index 262cbbb..21074ae 100755
3 hunks, 4 lines changed
[ ] @@ -3,7 +3,7 @@
set -e
set -u
[ ] -export PATH=/sbin:/bin:/usr/sbin:/usr/bin
[ ] +export PATH='/usr/bin:/bin'
enable_log=
restrict_path_list=
[~] @@ -41,8 +41,8 @@ reject_and_die()
{
local reason="$1"
log_cmd 'auth.err' 'btrbk REJECT' "$reason"
[ ] - echo "ERROR: ssh_filter_btrbk.sh: ssh command rejected:
$reason: $SSH_ORIGINAL_COMMAND" 1>&2
[ ] - exit 255
[x] + printf 'ERROR: ssh_filter_btrbk.sh: ssh command rejected: %s:
%s\n' "$reason" "$SSH_ORIGINAL_COMMAND" 1>&2
[ ] + exit 1
}
run_cmd()
[~] @@ -171,7 +171,7 @@ while [ "$#" -ge 1 ]; do
;;
*)
[ ] - echo "ERROR: ssh_filter_btrbk.sh: failed to parse command
line option: $key" 1>&2
[x] + printf 'ERROR: ssh_filter_btrbk.sh: failed to parse
command line option: %s\n' "$key" 1>&2
exit 255
;;
esac
Now "c", causes:
error: patch fragment without header at line 16: @@ -171,7 +171,8 @@
while [ "$#" -ge 1 ]; do
On branch improve-ssh_filter_btrbk.sh
Your branch is behind 'origin/improve-ssh_filter_btrbk.sh' by 8
commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Untracked files:
(use "git add <file>..." to include in what will be committed)
changes.patch
nothing added to commit but untracked files present (use "git add" to
track)
abort: commit failed: git exited with status 1
The same with --debug:
$ git crecord --debug
backup 'ssh_filter_btrbk.sh' as
'/home/calestyo/foo/z/btrbk/.git/record-backups/ssh_filter_btrbk.sh.gu99sc7q'
applying patch
diff --git a/ssh_filter_btrbk.sh b/ssh_filter_btrbk.sh
index 262cbbb..21074ae 100755
--- a/ssh_filter_btrbk.sh
+++ b/ssh_filter_btrbk.sh
@@ -41,8 +41,9 @@ reject_and_die()
{
local reason="$1"
log_cmd 'auth.err' 'btrbk REJECT' "$reason"
echo "ERROR: ssh_filter_btrbk.sh: ssh command rejected: $reason:
$SSH_ORIGINAL_COMMAND" 1>&2
exit 255
+ printf 'ERROR: ssh_filter_btrbk.sh: ssh command rejected: %s: %s\n'
"$reason" "$SSH_ORIGINAL_COMMAND" 1>&2
exit 1
}
run_cmd()
@@ -171,7 +171,8 @@ while [ "$#" -ge 1 ]; do
;;
*)
echo "ERROR: ssh_filter_btrbk.sh: failed to parse command line
option: $key" 1>&2
+ printf 'ERROR: ssh_filter_btrbk.sh: failed to parse command line
option: %s\n' "$key" 1>&2
exit 255
;;
esac
error: patch fragment without header at line 16: @@ -171,7 +171,8 @@ while [
"$#" -ge 1 ]; do
On branch improve-ssh_filter_btrbk.sh
Your branch is behind 'origin/improve-ssh_filter_btrbk.sh' by 8 commits, and
can be fast-forwarded.
(use "git pull" to update your local branch)
Untracked files:
(use "git add <file>..." to include in what will be committed)
changes.patch
nothing added to commit but untracked files present (use "git add" to track)
restoring
'/home/calestyo/foo/z/btrbk/.git/record-backups/ssh_filter_btrbk.sh.gu99sc7q'
to 'ssh_filter_btrbk.sh'
abort: commit failed: git exited with status 1
Thanks,
Chris.
PS & offtopic:
Is "s" (for staging) supposed to work in the current Debian sid
version? And is bash completion supposed to work (i.e. $ git cre<tab>)?
diff --git a/ssh_filter_btrbk.sh b/ssh_filter_btrbk.sh
index 262cbbb..21074ae 100755
--- a/ssh_filter_btrbk.sh
+++ b/ssh_filter_btrbk.sh
@@ -3,7 +3,7 @@
set -e
set -u
-export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+export PATH='/usr/bin:/bin'
enable_log=
restrict_path_list=
@@ -41,8 +41,8 @@ reject_and_die()
{
local reason="$1"
log_cmd 'auth.err' 'btrbk REJECT' "$reason"
- echo "ERROR: ssh_filter_btrbk.sh: ssh command rejected: $reason: $SSH_ORIGINAL_COMMAND" 1>&2
- exit 255
+ printf 'ERROR: ssh_filter_btrbk.sh: ssh command rejected: %s: %s\n' "$reason" "$SSH_ORIGINAL_COMMAND" 1>&2
+ exit 1
}
run_cmd()
@@ -171,7 +171,7 @@ while [ "$#" -ge 1 ]; do
;;
*)
- echo "ERROR: ssh_filter_btrbk.sh: failed to parse command line option: $key" 1>&2
+ printf 'ERROR: ssh_filter_btrbk.sh: failed to parse command line option: %s\n' "$key" 1>&2
exit 255
;;
esac