Remove useless uses of cat, and replace with filename arguments or redirection
PATCH 1/1 Remove useless uses of cat, and replace with filename arguments or redirection
Replace all uses of cat that do nothing other than read a single file.
--- git-commit.sh | 2 +- git-filter-branch.sh | 4 ++-- git-ls-remote.sh | 2 +- git-quiltimport.sh | 4 ++-- git-verify-tag.sh | 3 +-- 5 files changed, 7 insertions(+), 8 deletions(-)
git-commit.sh +1 -1
@@ -617,7 +617,7 @@ then tree=$(GIT_INDEX_FILE="$TMP_INDEX" git-write-tree) && rm -f "$TMP_INDEX" fi && - commit=$(cat "$GIT_DIR"/COMMIT_MSG | git-commit-tree $tree $PARENTS) && + commit=$(git-commit-tree $tree $PARENTS < "$GIT_DIR"/COMMIT_MSG) && rlogm=$(sed -e 1q "$GIT_DIR"/COMMIT_MSG) && git-update-ref -m "$GIT_REFLOG_ACTION: $rlogm" HEAD $commit "$current" && rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" &&
git-filter-branch.sh +2 -2
@@ -333,7 +333,7 @@ for commit in $unchanged; do done git-rev-list --reverse --topo-order $srcbranch --not $unchanged >../revs -commits=$(cat ../revs | wc -l | tr -d " ") +commits=$(wc -l ../revs | tr -d " ") test $commits -eq 0 && die "Found nothing to rewrite"
@@ -386,7 +386,7 @@ while read commit; do done <../revs git-update-ref refs/heads/"$dstbranch" $(head -n 1 ../map/$(tail -n 1 ../revs)) -if [ "$(cat ../map/$(tail -n 1 ../revs) | wc -l)" -gt 1 ]; then +if [ "$(wc -l ../map/$(tail -n 1 ../revs))" -gt 1 ]; then echo "WARNING: Your commit filter caused the head commit to expand to several rewritten commits. Only the first such commit was recorded as the current $dstbranch head but you will need to resolve the situation now (probably by manually merging the other commits). These are all the commits:" >&2 sed 's/^/ /' ../map/$(tail -n 1 ../revs) >&2 ret=1
git-ls-remote.sh +1 -1
@@ -82,7 +82,7 @@ rsync://* ) (cd $tmpdir && find refs -type f) | while read path do - cat "$tmpdir/$path" | tr -d '\012' + tr -d '\012' < "$tmpdir/$path" echo " $path" done && rm -fr $tmpdir
git-quiltimport.sh +2 -2
@@ -70,9 +70,9 @@ tmp_info="$tmp_dir/info" commit=$(git-rev-parse HEAD) mkdir $tmp_dir || exit 2 -for patch_name in $(cat "$QUILT_PATCHES/series" | grep -v '^#'); do +for patch_name in $(grep -v '^#' "$QUILT_PATCHES/series"); do echo $patch_name - (cat $QUILT_PATCHES/$patch_name | git-mailinfo "$tmp_msg" "$tmp_patch" > "$tmp_info") || exit 3 + git-mailinfo "$tmp_msg" "$tmp_patch" < "$QUILT_PATCHES/$patch_name" > "$tmp_info" || exit 3 test -s .dotest/patch || { echo "Patch is empty. Was it split wrong?" exit 1
git-verify-tag.sh +1 -2
@@ -38,8 +38,7 @@ trap 'rm -f "$GIT_DIR/.tmp-vtag"' 0 git-cat-file tag "$1" >"$GIT_DIR/.tmp-vtag" || exit 1 -cat "$GIT_DIR/.tmp-vtag" | -sed '/-----BEGIN PGP/Q' | +sed '/-----BEGIN PGP/Q' "$GIT_DIR/.tmp-vtag" | gpg --verify "$GIT_DIR/.tmp-vtag" - || exit 1 rm -f "$GIT_DIR/.tmp-vtag"
Signature · 1 line
1.5.2.1
git-filter-branch.sh for commit in $unchanged; do · line 336
Quoted 3 lines · On Tue, 05 Jun 2007 18:34:59 -0700 Josh Triplett <[email protected]> wrote:
git-filter-branch.sh +1
-1-commits=$(cat ../revs | wc -l | tr -d " ") +commits=$(wc -l ../revs | tr -d " ")
This is not equivalent, you probably wanted:
commits=$(wc -l <../revs | tr -d " ")
Cheers,
Stephen Rothwell
Quoted 8 lines · Stephen Rothwell
git-filter-branch.sh for commit in $unchanged; do · line 336
Quoted 3 lines · On Tue, 05 Jun 2007 18:34:59 -0700 Josh Triplett <[email protected]> wrote:
git-filter-branch.sh +1
-1-commits=$(cat ../revs | wc -l | tr -d " ") +commits=$(wc -l ../revs | tr -d " ")This is not equivalent, you probably wanted:
commits=$(wc -l <../revs | tr -d " ")
Which relevant version(s) of wc do not accept filename arguments? POSIX[1] seems to specify it. Or do you mean that there is some subtle difference in its processing of stdin vs specified files?
[1]- http://www.opengroup.org/onlinepubs/000095399/utilities/wc.html
Michael Poole
Quoted 9 lines · Michael Poole
Quoted 7 lines · Stephen Rothwell
git-filter-branch.sh for commit in $unchanged; do · line 336
Quoted 3 lines · On Tue, 05 Jun 2007 18:34:59 -0700 Josh Triplett <[email protected]> wrote:
git-filter-branch.sh +1
-1-commits=$(cat ../revs | wc -l | tr -d " ") +commits=$(wc -l ../revs | tr -d " ")This is not equivalent, you probably wanted:
Quoted 5 lines
Quoted 1 line
commits=$(wc -l <../revs | tr -d " ")
Which relevant version(s) of wc do not accept filename arguments? POSIX[1] seems to specify it. Or do you mean that there is some subtle difference in its processing of stdin vs specified files?
Josh is right. The output *is* different because it contains the filename as well. See
$ wc < .gitk | tr -d " " 2177551 $ wc .gitk | tr -d " " 2177551.gitk
cheers
m
Quoted 2 lines · On Wed, 6 Jun 2007 15:58:09 +1200 "Martin Langhoff"…
Josh is right. The output *is* different because it contains the
^^^^
My name is Stephen :-) and that is indeed what I meant.
Cheers,
Stephen Rothwell
Quoted 5 lines · Stephen Rothwell
Quoted 2 lines · On Wed, 6 Jun 2007 15:58:09 +1200 "Martin Langhoff"…
Josh is right. The output *is* different because it contains the
^^^^
My name is Stephen :-) and that is indeed what I meant.
Sorry! Cross-eyed over the email thread, but not over posix behaviour ;-)
...cleans those glasses now
martin