Mercurial > dotfiles
comparison .shell.d/50.vcs_functions.sh @ 210:0590f34b92a0
shell.d: split hg and git functions out of vcs functions
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Sun, 16 May 2010 20:43:00 -0500 |
parents | 9e45ac5350fd |
children | da06f9fd5016 |
comparison
equal
deleted
inserted
replaced
209:c28a1e2c746a | 210:0590f34b92a0 |
---|---|
1 ## vcs_functions | 1 ## vcs_functions |
2 # This file contains a handful of functions that relate to using some version | 2 # This file contains a handful of functions that relate to using some version |
3 # control tool or other. | 3 # control tool or other. |
4 | |
5 function mq () { | |
6 ( wcroot ; | |
7 hg -R .hg/patches $@ | |
8 ) | |
9 } | |
10 | |
11 function mq-snapshot () { | |
12 mq ci -m "Applied on $(hg log -r qparent --template '{node|short}\n')" | |
13 } | |
14 | 4 |
15 function ezsvnsync() { | 5 function ezsvnsync() { |
16 if [ x"$1" = "x" ] ; then | 6 if [ x"$1" = "x" ] ; then |
17 echo 'usage: ez-svn-sync repo url' | 7 echo 'usage: ez-svn-sync repo url' |
18 return 0 | 8 return 0 |
48 if [ x"$url" = "x" ] ; then | 38 if [ x"$url" = "x" ] ; then |
49 echo -n 'No repo found (tried svn, git-svn, hgsubversion)' | 39 echo -n 'No repo found (tried svn, git-svn, hgsubversion)' |
50 fi | 40 fi |
51 echo $url | 41 echo $url |
52 } | 42 } |
53 | |
54 function hgsvnmergebranch() { | |
55 local targetrev | |
56 local striprev | |
57 targetrev=$(hg id | cut -d ' ' -f 1) | |
58 hg merge $1 | |
59 hg ci -m "Merging $1" | |
60 striprev=$(hg id | cut -d ' ' -f 1) | |
61 hg co $targetrev | |
62 hg diff -r$targetrev:$striprev | hg import - -m "Merged branch $1." | |
63 hg strip $striprev | |
64 } | |
65 alias hg-svn-merge-branch=hgsvnmergebranch | |
66 | |
67 function hgsvnrebaseall() { | |
68 for b in `hg log -u 'Augie Fackler <durin42@gmail.com>' --template '{branches}\n' | sort | uniq` | |
69 do | |
70 echo "rebase $b" | |
71 hg co $b | |
72 if [[ "$?" != "0" ]] ; then | |
73 echo "abort: could not checkout $b" | |
74 return | |
75 fi | |
76 hg parent --svn > /dev/null | |
77 if [[ "$?" == "0" ]] ; then | |
78 hg rebase --svn || return | |
79 else | |
80 echo "Skip $b since it has a merge." | |
81 fi | |
82 done | |
83 } | |
84 alias hg-svn-rebase-all=hgsvnrebaseall | |
85 | |
86 function hgamend() { | |
87 hg qimport -r . && hg qref && hg qfin qtip | |
88 } | |
89 alias hg-amend=hgamend | |
90 | |
91 function hg_verify_all() { | |
92 for x in $(find . -name '.hg') ; do | |
93 y=$(dirname $x) | |
94 echo $y | |
95 hg verify -R $y | |
96 done | |
97 } | |
98 | |
99 function hgsvnmkbranch() { | |
100 local upstream | |
101 upstream=$(hg paths default | sed 's%/*$%%') | |
102 local branchname | |
103 if [ "x$1" = "x" ] ; then | |
104 echo 'Must provide new branch name.' | |
105 return 1 | |
106 fi | |
107 local d=`hg svn info | grep URL | sed 's/.*://'` | |
108 local br=`echo $d | awk '{ | |
109 if ( index($1, "trunk") ) { | |
110 print "trunk" | |
111 } else { | |
112 x = index($1, "branches") ; | |
113 if ( x != 0 ) { | |
114 sub(".*/branches/", ""); | |
115 sub("/.*", ""); | |
116 print $0 | |
117 } | |
118 } | |
119 }'` | |
120 | |
121 branchname=$br | |
122 echo svn cp $upstream/$branchname $upstream/branches/$1 | |
123 } | |
124 alias hg-svn-mkbranch=hgsvnmkbranch | |
125 | 43 |
126 # Function to clean locks out of svn wcs | 44 # Function to clean locks out of svn wcs |
127 function clean_svn_source_trees() { | 45 function clean_svn_source_trees() { |
128 for aa in */ ; do | 46 for aa in */ ; do |
129 pushd $aa > /dev/null | 47 pushd $aa > /dev/null |
213 return 0 | 131 return 0 |
214 fi | 132 fi |
215 return 1 | 133 return 1 |
216 } | 134 } |
217 | 135 |
218 function git_next_unmerged_file() { | |
219 git status | egrep '(unmerged|both modified)' | head -n 1 | sed 's/.*: //' | |
220 } | |
221 alias git-next-unmerged-file=git_next_unmerged_file | |
222 | |
223 function git_repack_all() { | |
224 for repo in $(find . | \ | |
225 grep '/objects/pack/' | \ | |
226 sed -e 's%\.git/objects/pack/.*%%' | \ | |
227 sed -e 's%git/objects/pack/.*%git%' | sort | uniq) ; do | |
228 pushd $repo | |
229 git repack -ad --window 100 | |
230 git gc --prune="`date`" | |
231 popd | |
232 done | |
233 } | |
234 | |
235 function git_fsck_all() { | |
236 for repo in $(find . | \ | |
237 grep '/objects/pack/' | \ | |
238 sed -e 's%\.git/objects/pack/.*%%' | \ | |
239 sed -e 's%git/objects/pack/.*%git%' | sort | uniq) ; do | |
240 pushd $repo | |
241 git fsck | |
242 popd | |
243 done | |
244 } | |
245 | |
246 # change to the root dir of the current wc | 136 # change to the root dir of the current wc |
247 function wcroot() { | 137 function wcroot() { |
248 local root=`hg root 2> /dev/null` | 138 local root=`hg root 2> /dev/null` |
249 if [ x$root != 'x' ] ; then | 139 if [ x$root != 'x' ] ; then |
250 cd $root | 140 cd $root |