-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Git Tools integration #1
Changes from 6 commits
b9a2c32
a66891c
a78e2fc
a7f0dee
9235dae
51ba5bb
643a013
f6df03b
dc04f26
19d5e72
a034d41
57d4375
3b140e9
a334ec1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
# Show the origin | ||
# echoes [email protected]:pspoerri/cosmo-pompa.git | ||
function git_show_origin { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
echo $(git -C "${path}" config --get remote.origin.url) | ||
} | ||
|
||
# Show the revision | ||
# echoes cf28a6f | ||
function git_show_revision { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
echo $(git -C "${path}" rev-parse --short HEAD) | ||
} | ||
|
||
# Show the check in date of the head | ||
# echoes 2015-12-21 10:42:20 +0100 | ||
function git_show_checkindate { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
revision=$(git_show_revision "${path}") | ||
echo $(git -C "${path}" show -s --format=%ci ${revision}) | ||
} | ||
|
||
# Show the current branch | ||
# echoes buildenv | ||
function git_show_branch { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
echo $(git -C "${path}" branch 2>/dev/null| sed -n '/^\*/s/^\* //p') | ||
} | ||
|
||
# Show all the branch information and where the head is pointing | ||
# echoes (HEAD -> buildenv, origin/buildenv) | ||
function git_show_branch_all { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
echo $(git -C "${path}" log -n 1 --pretty=%d HEAD) | ||
} | ||
|
||
# Determines if the branch is dirty or not. | ||
function git_repository_is_clean { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
git -C "${path}" diff --quiet 2>/dev/null >&2 | ||
} | ||
|
||
# Determines the status of a repository | ||
# echoes clean or dirty | ||
function git_show_repository_status { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
if git_repository_is_clean "${path}" ; then | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can probably call directly There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Great idea! |
||
echo "clean" | ||
else | ||
echo "dirty" | ||
fi | ||
} | ||
|
||
# Check if path is a git repository | ||
# returns a unix 0, 1 return code depending on the status | ||
function git_is_repository { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
git -C "${path}" rev-parse --is-inside-work-tree 2>/dev/null >&2 | ||
} | ||
|
||
# Show if path is a repository | ||
# echoes true or false | ||
function git_repository { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
|
||
if git_is_repository "${path}" ; then | ||
echo "true" | ||
else | ||
echo "false" | ||
fi | ||
} | ||
|
||
# Pretty print git info | ||
# echoes "No git repository" if we are not dealing with a git repository | ||
# echoes "Rev cf28a6f (dirty) on buildenv from [email protected]:pspoerri/cosmo-pompa.git" | ||
# otherwise | ||
function git_info { | ||
path=$1 | ||
|
||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
if ! git_is_repository "${path}" ; then | ||
echo "No git repository" | ||
exit 1 | ||
fi | ||
|
||
revision=$(git_show_revision "${path}") | ||
branch=$(git_show_branch "${path}") | ||
origin=$(git_show_origin "${path}") | ||
dirty="" | ||
if ! git_repository_is_clean "${path}" ; then | ||
dirty=" ($(git_repository_status ${path}))" | ||
fi | ||
echo "Rev ${revision}${dirty} on ${branch} from ${origin}" | ||
} | ||
|
||
# Function to test the implementation | ||
function test_functions { | ||
path=$1 | ||
if [ -z "${path}" ] ; then | ||
path=$(pwd) | ||
fi | ||
|
||
echo Origin: $(git_show_origin "${path}") | ||
echo Revision: $(git_show_revision "${path}") | ||
echo Check in date: $(git_show_checkindate "${path}") | ||
echo Branch: $(git_show_branch "${path}") | ||
echo Branch all: $(git_show_branch_all "${path}") | ||
echo Status: $(git_show_repository_status "${path}") | ||
echo Repository?: $(git_is_repository "${path}") | ||
echo Info: $(git_info "${path}") | ||
echo Info no repo: $(git_info "/") | ||
} | ||
|
||
export -f git_show_origin | ||
export -f git_show_revision | ||
export -f git_show_checkindate | ||
export -f git_show_branch | ||
export -f git_show_branch_all | ||
export -f git_repository_is_clean | ||
export -f git_show_repository_status | ||
export -f git_is_repository | ||
export -f git_repository | ||
export -f git_info |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -153,19 +153,15 @@ writeModuleList() | |
touch ${modfile} | ||
module list -t 2>&1 | grep -v alps | grep -v '^- Package' | grep -v '^Currently Loaded' | sed 's/^/module load /g' > ${modfile} | ||
|
||
# Workaround | ||
# Workaround for machines that store the modules in a predefined list | ||
# such as kesch | ||
if [[ -n "$ENVIRONMENT_TEMPFILE" ]] ; then | ||
# cat ${modfile} | egrep -v "module load cce\/" > /tmp/tmp.${host}.${user}.$$ | ||
# compilo=`cat ${modfile} | egrep "module load cce\/" | sed 's/module load/module swap/g'` | ||
# echo "${compilo}" >> /tmp/tmp.${host}.${user}.$$ | ||
# /bin/mv -f /tmp/tmp.${host}.${user}.$$ ${modfile} | ||
# else | ||
cp $ENVIRONMENT_TEMPFILE ${modfile} | ||
cp $ENVIRONMENT_TEMPFILE ${modfile} | ||
else | ||
if [[ -z ${host} ]]; then | ||
exitError 654 ${LINENO} "host is not defined" | ||
fi | ||
# workaround for Todi, Daint, and Lema | ||
# workaround for Todi, Daint, and Lema | ||
if [ "${host}" == "lema" -o "${host}" == "todi" -o "${host}" == "daint" ] ; then | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This file already exists on svn. |
||
cat ${modfile} | egrep -v "module load cce\/|module load gcc\/|module load pgi\/" > /tmp/tmp.${host}.${user}.$$ | ||
compilo=`cat ${modfile} | egrep "module load cce\/|module load gcc\/|module load pgi\/" | sed 's/module load/module swap/g'` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
More of a curiosity than a problem: does this really work? If I get it correctly, this function returns 0 or 1 depending on whether the return status of
git diff
is 0 or 1 (probably 1 meaning dirty directory). Am I right?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, exactly. We get a
0
if there are no changes and1
if we have a change.https://git-scm.com/docs/git-diff on this:
Then I can use the function within an
if
statement.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What happens if you run this function on a directory which is not a git repo? Undefined behavior?
Anyway it's fine, thanks for clarifying.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well I could add an additional switch to the functions that check if $path is a repo.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no need.
Good job.
On Wed, Dec 23, 2015 at 10:38 AM, Pascal Spörri [email protected]
wrote: