]> git.wh0rd.org - home.git/blame - .bin/git-svn
cros-board: update
[home.git] / .bin / git-svn
CommitLineData
6c162084
MF
1#!/bin/sh
2
3gdir=".git"
4if [ ! -d ${gdir} ] ; then
5 echo "Run this is in the root of the git tree"
6 exit 1
7fi
8
9revmap() {
10 find ${gdir}/svn/$1/ '(' -name '.rev_map.*' -a '!' -name '*.bak' ')' -print
11}
12
13decode() {
14 xxd -c24 < $1
15}
16encode() {
17 xxd -c24 -r
18}
19
20get_branch() {
21 branch=${1:-trunk}
22 if [ ! -d ${gdir}/svn/${branch} ] ; then
23 echo "Branch ${branch} not in ${gdir}/svn/"
24 exit 1
25 fi
26
27 map=$(revmap ${branch})
28
29 cur_rev=$(printf '%i' 0x$(decode $map | tail -n1 | awk '{print $3}'))
30}
31
32show() {
33 get_branch "$@"
34 echo "${branch}: at rev ${cur_rev}"
35 exit 0
36}
37
38reset() {
39 get_branch "$@"
40 new_rev=$2
41 if [ -z "$new_rev" ] || [ "$new_rev" -gt "$cur_rev" ] ; then
42 echo "${branch}: invalid rev '$new_rev' (at $cur_rev)"
43 exit 1
44 fi
45
46 printf "really reset $branch to $new_rev ? [y/N] "
47 read ans
48 case ${ans} in
49 [yY]) ;;
50 *) exit 1;;
51 esac
52
53 hex0=$(printf '%04x' $(( new_rev % 0x10000 )) )
54 hex1=$(printf '%04x' $(( new_rev / 0x10000 )) )
55 cp $map $map.bak
56 decode $map.bak \
57 | sed -n "1,/^[^:]*: $hex1 $hex0/p" \
58 | encode \
59 > $map
60
61 show ${branch}
62 echo "don't forget to reset manually ref/remotes/${branch}"
63}
64
65usage() {
66 echo "Unknown op '$op'"
67 exit 1
68}
69
70branch=
71op=$1
72shift
73case $op in
74 -s) show "$@";;
75 -r) reset "$@";;
76 *) usage;;
77esac