lib/pvl/commit.sh
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 21:17:06 +0200
changeset 736 75938aa0390b
parent 632 711be783d0a1
permissions -rw-r--r--
pvl.hosts.interfaces: remove junos-specifics
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
# VCS abstraction layer
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
. $LIB/pvl/commit/git.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
. $LIB/pvl/commit/hg.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
     6
commit_GETOPTS='cCm:M'
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
COMMIT=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
COMMIT_DIFF=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
COMMIT_MSG=' '
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
function commit_help {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
Commit:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
    -C      do not commit changes
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
    -c      commit changes
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
    -m MSG  commit message
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
    18
    -M      interactive commit message
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
function commit_opt {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
    local opt=$1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
    local optarg="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
    case $opt in
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
        c)  COMMIT=1 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
        C)  COMMIT=0 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
        m)  COMMIT_MSG="$optarg" ;;
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
    31
        M)  COMMIT_MSG= ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
        
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    33
        n)  COMMIT=0 ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
        p)  COMMIT_DIFF=1 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
        *)  return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    36
    esac
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
function commit_probe {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
    local repo="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
    for commit in git hg; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
        if ${commit}_probe "$repo"; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
            echo $commit
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
            return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
        fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
    return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    51
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    52
## Commit changes to version control:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
#   update_commit .../etc "commit message"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    55
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    56
# Invokes `hg commit`, first showing the diff.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
function commit {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
    local repo="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
    local commit_msg="$COMMIT_MSG"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
    # detect
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
    local commit="$(commit_probe "$repo")"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
    if [ -z "$commit" ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
        log_warn "$repo: Unable to detect VCS repo"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
        return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    67
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    68
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
    # operate?
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    70
    if [ "$COMMIT" = 1 ]; then
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
    71
        log_force "$repo: force commit"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    72
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
    73
        [ "$COMMIT_DIFF" ] && cmd_indent "    " ${commit}_diff "$repo" || true
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    74
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    75
        ${commit}_commit "$repo" "$commit_msg"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    76
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    77
    elif ! ${commit}_modified "$repo"; then
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
    78
        log_skip "$repo: no changes to commit"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    79
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    80
    elif [ "$COMMIT" = 0 ]; then
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
    81
        log_noop "$repo: skip commit"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    82
        
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    83
        # still show diff, though
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
    84
        [ "$COMMIT_DIFF" ] && cmd_indent "    " ${commit}_diff "$repo" || true
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    85
    else
632
711be783d0a1 update lib: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 629
diff changeset
    86
        log_apply "$repo: commit: $commit_msg"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    87
629
7214fe5c6fac lib/pvl: fixfix
Tero Marttila <tero.marttila@aalto.fi>
parents: 628
diff changeset
    88
        [ "$COMMIT_DIFF" ] && cmd_indent "    " ${commit}_diff "$repo" || true
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    89
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    90
        ${commit}_commit "$repo" "$commit_msg"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    91
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    92
}
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    93
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    94
function _commit {
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    95
    local repo="$1"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    96
    local cmd="$2"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    97
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    98
    # detect
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    99
    local commit="$(commit_probe "$repo")"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   100
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   101
    if [ -z "$commit" ]; then
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   102
        log_warn "$repo: Unable to detect VCS repo"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   103
        return 1
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   104
    fi
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   105
    
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   106
    ${commit}_${cmd} $repo "${@:3}"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   107
}
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   108
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   109
function commit_modified {
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   110
    local repo="$1"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   111
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   112
    _commit $repo modified
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   113
}
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   114
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   115
function commit_time {
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   116
    local repo="$1"
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   117
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   118
    _commit $repo time
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
   119
}