Mercurial > dotfiles
annotate .shell.d/50.hg_functions.sh @ 336:ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
I've been toting around this package.el from 2009 or so, and something
in the package format seems to have changed that broke me. Thanks to
some related diagnostics by Lucas, I've grabbed the last package.el
that worked with emacs 23 and stashed it here. This seems to work,
modulo some things (notably js2-mode and smex) now seem to require
emacs 24 if you install them using package.el, so this will end up
being brittle on my last couple of emacs23 machines.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 29 May 2014 14:30:42 -0400 |
parents | 2b129f63d910 |
children | fc89d315942f |
rev | line source |
---|---|
210
0590f34b92a0
shell.d: split hg and git functions out of vcs functions
Augie Fackler <durin42@gmail.com>
parents:
204
diff
changeset
|
1 ## hg_functions |
0590f34b92a0
shell.d: split hg and git functions out of vcs functions
Augie Fackler <durin42@gmail.com>
parents:
204
diff
changeset
|
2 # various hg utility functions |
0 | 3 |
60
87b2ccf6ec44
Improved mq now works anywhere inside the parent hg repo.
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
4 function mq () { |
87b2ccf6ec44
Improved mq now works anywhere inside the parent hg repo.
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
5 ( wcroot ; |
87b2ccf6ec44
Improved mq now works anywhere inside the parent hg repo.
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
6 hg -R .hg/patches $@ |
87b2ccf6ec44
Improved mq now works anywhere inside the parent hg repo.
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
7 ) |
87b2ccf6ec44
Improved mq now works anywhere inside the parent hg repo.
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
8 } |
13
c22ca1514f3b
Add an alias to ease working with mq repos.
Augie Fackler <durin42@gmail.com>
parents:
10
diff
changeset
|
9 |
253
93b24cdd2cce
hg funcs: rename mq-snapshot to appease bash
Augie Fackler <durin42@gmail.com>
parents:
232
diff
changeset
|
10 function mq_snapshot () { |
200
a563c21235ad
vcs-functions: add mq-snapshot
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
11 mq ci -m "Applied on $(hg log -r qparent --template '{node|short}\n')" |
a563c21235ad
vcs-functions: add mq-snapshot
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
12 } |
253
93b24cdd2cce
hg funcs: rename mq-snapshot to appease bash
Augie Fackler <durin42@gmail.com>
parents:
232
diff
changeset
|
13 alias mq-snapshot=mq_snapshot |
200
a563c21235ad
vcs-functions: add mq-snapshot
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
14 |
228
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
15 function hg_rebase_all () { |
232
369d869082fd
hg-rebase-all: corrected wc cleanliness check
Augie Fackler <durin42@gmail.com>
parents:
231
diff
changeset
|
16 hg sum | egrep 'commit: .*\(clean\)$' || (echo 'abort: wc not clean' ; return 1) || return 1 |
228
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
17 if [ "x$1" = "x" ] ; then |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
18 echo 'abort: give destination for rebase' |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
19 return 2 |
228
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
20 fi |
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
21 if [ "$1" = "tip" ] ; then |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
22 echo 'abort: tip is essentially never what you mean here' |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
23 return 2 |
228
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
24 fi |
309
74990ae54bd2
hg-rebase-all: defend against no bookmarks being set
Augie Fackler <raf@durin42.com>
parents:
305
diff
changeset
|
25 marks=$(hg book | sed 's/^ \*/ /' | awk '{ print $1 }') |
74990ae54bd2
hg-rebase-all: defend against no bookmarks being set
Augie Fackler <raf@durin42.com>
parents:
305
diff
changeset
|
26 if [ "$marks" = "no bookmarks set" ] ; then |
74990ae54bd2
hg-rebase-all: defend against no bookmarks being set
Augie Fackler <raf@durin42.com>
parents:
305
diff
changeset
|
27 echo "no bookmarks set, nothing to rebase" |
74990ae54bd2
hg-rebase-all: defend against no bookmarks being set
Augie Fackler <raf@durin42.com>
parents:
305
diff
changeset
|
28 fi |
74990ae54bd2
hg-rebase-all: defend against no bookmarks being set
Augie Fackler <raf@durin42.com>
parents:
305
diff
changeset
|
29 for b in $(echo $marks) ; do |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
30 echo "About to rebase $b" |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
31 hg co --clean $b |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
32 out=$(hg rebase -d "$1") |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
33 code=$? |
320
2b129f63d910
hg-rebase-all: remove bashism
Augie Fackler <raf@durin42.com>
parents:
309
diff
changeset
|
34 echo $out | grep "nothing to rebase" |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
35 if [ $? = 0 ] ; then |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
36 echo 'moving on' |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
37 else |
305
d9cc862e6308
hg_rebase_all: fix exit status check
Augie Fackler <raf@durin42.com>
parents:
291
diff
changeset
|
38 if [ $code -ne 0 ] ; then |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
39 echo "rebase exited with status $out" |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
40 return 3 |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
41 fi |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
42 fi |
228
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
43 done |
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
44 } |
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
45 alias hg-rebase-all=hg_rebase_all |
0c8939baa35c
hg-rebase-all: new function to rebase all bookmarked revisions
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
46 |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
47 function hgsvnmergebranch() { |
61
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
48 local targetrev |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
49 local striprev |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
50 targetrev=$(hg id | cut -d ' ' -f 1) |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
51 hg merge $1 |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
52 hg ci -m "Merging $1" |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
53 striprev=$(hg id | cut -d ' ' -f 1) |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
54 hg co $targetrev |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
55 hg diff -r$targetrev:$striprev | hg import - -m "Merged branch $1." |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
56 hg strip $striprev |
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
57 } |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
58 alias hg-svn-merge-branch=hgsvnmergebranch |
61
79c2c3932362
Add hg-svn-merge-branch which does all the steps of merging an hg branch for me.
Augie Fackler <durin42@gmail.com>
parents:
60
diff
changeset
|
59 |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
60 function hgsvnrebaseall() { |
69
5232fa3d7ad3
Changes required by log being back to the default.
Augie Fackler <durin42@gmail.com>
parents:
67
diff
changeset
|
61 for b in `hg log -u 'Augie Fackler <durin42@gmail.com>' --template '{branches}\n' | sort | uniq` |
58
20834b97b814
Add function to rebase all local named branches to HEAD of their parent svn branch.
Augie Fackler <durin42@gmail.com>
parents:
47
diff
changeset
|
62 do |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
63 echo "rebase $b" |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
64 hg co $b |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
65 if [[ "$?" != "0" ]] ; then |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
66 echo "abort: could not checkout $b" |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
67 return |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
68 fi |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
69 hg parent --svn > /dev/null |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
70 if [[ "$?" == "0" ]] ; then |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
71 hg rebase --svn || return |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
72 else |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
73 echo "Skip $b since it has a merge." |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
74 fi |
58
20834b97b814
Add function to rebase all local named branches to HEAD of their parent svn branch.
Augie Fackler <durin42@gmail.com>
parents:
47
diff
changeset
|
75 done |
20834b97b814
Add function to rebase all local named branches to HEAD of their parent svn branch.
Augie Fackler <durin42@gmail.com>
parents:
47
diff
changeset
|
76 } |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
77 alias hg-svn-rebase-all=hgsvnrebaseall |
58
20834b97b814
Add function to rebase all local named branches to HEAD of their parent svn branch.
Augie Fackler <durin42@gmail.com>
parents:
47
diff
changeset
|
78 |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
79 function hgamend() { |
62
f9e826bd1f1b
Add a function to ammend the latest revision in hg. I don't do this often, but when I need it it is handy.
Augie Fackler <durin42@gmail.com>
parents:
61
diff
changeset
|
80 hg qimport -r . && hg qref && hg qfin qtip |
f9e826bd1f1b
Add a function to ammend the latest revision in hg. I don't do this often, but when I need it it is handy.
Augie Fackler <durin42@gmail.com>
parents:
61
diff
changeset
|
81 } |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
82 alias hg-amend=hgamend |
62
f9e826bd1f1b
Add a function to ammend the latest revision in hg. I don't do this often, but when I need it it is handy.
Augie Fackler <durin42@gmail.com>
parents:
61
diff
changeset
|
83 |
204
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
84 function hg_verify_all() { |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
85 for x in $(find . -name '.hg') ; do |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
86 y=$(dirname $x) |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
87 echo $y |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
88 hg verify -R $y |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
89 done |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
90 } |
9e45ac5350fd
vcs funcs: tools for verifying hg or git repos, packing git repos
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
91 |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
92 function hgsvnmkbranch() { |
46
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
93 local upstream |
129
1286c27cf0c0
Need to use paths default instead of the outdated svn url now.
Augie Fackler <durin42@gmail.com>
parents:
115
diff
changeset
|
94 upstream=$(hg paths default | sed 's%/*$%%') |
46
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
95 local branchname |
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
96 if [ "x$1" = "x" ] ; then |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
97 echo 'Must provide new branch name.' |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
98 return 1 |
46
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
99 fi |
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
100 local d=`hg svn info | grep URL | sed 's/.*://'` |
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
101 local br=`echo $d | awk '{ |
291
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
102 if ( index($1, "trunk") ) { |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
103 print "trunk" |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
104 } else { |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
105 x = index($1, "branches") ; |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
106 if ( x != 0 ) { |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
107 sub(".*/branches/", ""); |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
108 sub("/.*", ""); |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
109 print $0 |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
110 } |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
111 } |
142fb39e4e55
hg-rebase-all: correctly use rebase result code
Augie Fackler <raf@durin42.com>
parents:
253
diff
changeset
|
112 }'` |
46
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
113 |
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
114 branchname=$br |
47
e80bc65439ac
Too clever for my own good in this function.
Augie Fackler <durin42@gmail.com>
parents:
46
diff
changeset
|
115 echo svn cp $upstream/$branchname $upstream/branches/$1 |
46
8946e6ae2747
Stopgap hg-svn-mkbranch command to save me typing until the feature goes into hgsubversion itself.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
116 } |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
117 alias hg-svn-mkbranch=hgsvnmkbranch |