Use git-rev-parse instead of cg-Xnormid. This allows Cogito to work properly with packed objects. Signed off by: Brian Gerst --- commit 32c6125190d7d183110790b556a8e1128f29c52d tree 0e53bc37eb8ad12f093cfb0e903689ef95c54ece parent 266e27c48ba20c1af33f6a3eb966e8cd0d3c8b65 author Brian Gerst Sun, 03 Jul 2005 01:53:22 -0400 committer Brian Gerst Sun, 03 Jul 2005 01:53:22 -0400 Makefile | 2 +- cg-Xnormid | 63 ------------------------------------------------------------ commit-id | 12 +---------- parent-id | 4 +--- tree-id | 4 ++-- 5 files changed, 5 insertions(+), 80 deletions(-) diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ SCRIPT= commit-id tree-id parent-id cg-a cg-pull cg-restore cg-rm cg-seek cg-status cg-tag cg-tag-ls cg-update \ cg cg-admin-ls cg-push cg-branch-chg -LIB_SCRIPT=cg-Xlib cg-Xmergefile cg-Xnormid +LIB_SCRIPT=cg-Xlib cg-Xmergefile GEN_SCRIPT= cg-version diff --git a/cg-Xnormid b/cg-Xnormid deleted file mode 100755 --- a/cg-Xnormid +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -# -# Normalize an ID to an SHA1 hash value. -# Copyright (c) Petr Baudis, 2005 -# Copyright (c) Philip Pokorny, 2005 -# -# Strings resolve in this order: -# NULL, this, HEAD => .git/HEAD -# -# -# short SHA1 (4 or more hex digits) -# -# Takes the ID to normalize and returns the normalized ID. - -. ${COGITO_LIB}cg-Xlib - -id="$1" - -if [ ! "$id" ] || [ "$id" = "this" ] || [ "$id" = "HEAD" ]; then - read id < "$_git/HEAD" - -elif [ -r "$_git/refs/tags/$id" ]; then - read id < "$_git/refs/tags/$id" - -elif [ -r "$_git/refs/heads/$id" ]; then - read id < "$_git/refs/heads/$id" - -# Short id's must be lower case and at least 4 digits. -elif [[ "$id" == [0-9a-z][0-9a-z][0-9a-z][0-9a-z]* ]]; then - idpref=${id:0:2} - idpost=${id:2} - - # Assign array elements to matching names - idmatch=($_git_objects/$idpref/$idpost*) - - if [ ${#idmatch[*]} -eq 1 ] && [ -r "$idmatch" ]; then - id=$idpref${idmatch#$_git_objects/$idpref/} - elif [ ${#idmatch[*]} -gt 1 ]; then - echo "Ambiguous id: $id" >&2 - exit 1 - fi -fi - -if ([ "$id" ] && [ "$id" != " " ]) && ([ ${#id} -ne 40 ] || [ ! -f .git/objects/${id:0:2}/${id:2} ]); then - reqsecs=$(date --date="$id" +'%s' 2>/dev/null) - - if [ "$reqsecs" ]; then - id=$(git-rev-list --min-age=$reqsecs --max-count=1 HEAD) - fi -fi - -# If we don't have a 40-char ID by now, it's an error -if [ ${#id} -ne 40 ] || [ ! -f $_git_objects/${id:0:2}/${id:2} ]; then - echo "Invalid id: $id" >&2 - exit 1 -fi - -if [ "$(git-cat-file -t "$id")" = "tag" ]; then - id=$(git-cat-file tag "$id" | head -n 1) - id="${id#object }" -fi - -echo $id diff --git a/commit-id b/commit-id --- a/commit-id +++ b/commit-id @@ -5,14 +5,4 @@ # # Takes the appropriate ID, defaults to HEAD. -. ${COGITO_LIB}cg-Xlib - -id="$1" -normid=$(${COGITO_LIB}cg-Xnormid "$id") || exit 1 - -if [ "$(git-cat-file -t "$normid")" != "commit" ]; then - echo "Invalid commit id: $id" >&2 - exit 1 -fi - -echo $normid +git-rev-parse "${1:-HEAD}" diff --git a/parent-id b/parent-id --- a/parent-id +++ b/parent-id @@ -7,6 +7,4 @@ # # NOTE: Will return multiple SHA1s if ID is a commit with multiple parents. -id=$(commit-id "$1") || exit 1 - -git-cat-file commit $id | awk '/^parent/{print $2};/^$/{exit}' +git-rev-parse "${1:-HEAD}^" diff --git a/tree-id b/tree-id --- a/tree-id +++ b/tree-id @@ -5,8 +5,8 @@ # # Takes ID of the appropriate commit, defaults to HEAD. -id="$1" -normid=$(${COGITO_LIB}cg-Xnormid "$id") || exit 1 +id="${1:-HEAD}" +normid=$(git-rev-parse "$id") type=$(git-cat-file -t "$normid") if [ "$type" = "commit" ]; then