Mercurial > dotfiles
annotate .shell.d/50.vcs_functions.sh @ 363:51aaf8bcd6ec
vcs_functions: fix vcs_current_branch to use hg templating
This takes it from 4 hg invocations to 1, and skips a bunch of pipelines.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Fri, 11 Sep 2015 09:53:34 -0400 |
parents | 901e85174513 |
children | 354d05616d65 |
rev | line source |
---|---|
0 | 1 ## vcs_functions |
2 # This file contains a handful of functions that relate to using some version | |
3 # control tool or other. | |
4 | |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
5 function ezsvnsync() { |
169
040ac89ffe1e
ez-svn-sync: add usage help
Augie Fackler <durin42@gmail.com>
parents:
167
diff
changeset
|
6 if [ x"$1" = "x" ] ; then |
040ac89ffe1e
ez-svn-sync: add usage help
Augie Fackler <durin42@gmail.com>
parents:
167
diff
changeset
|
7 echo 'usage: ez-svn-sync repo url' |
040ac89ffe1e
ez-svn-sync: add usage help
Augie Fackler <durin42@gmail.com>
parents:
167
diff
changeset
|
8 return 0 |
040ac89ffe1e
ez-svn-sync: add usage help
Augie Fackler <durin42@gmail.com>
parents:
167
diff
changeset
|
9 fi |
63
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
10 local repo |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
11 repo=$1 |
169
040ac89ffe1e
ez-svn-sync: add usage help
Augie Fackler <durin42@gmail.com>
parents:
167
diff
changeset
|
12 local url |
63
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
13 url=$2 |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
14 svnadmin create $repo |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
15 echo '#!/bin/sh' >> $repo/hooks/pre-revprop-change |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
16 echo 'exit 0' >> $repo/hooks/pre-revprop-change |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
17 chmod +x $repo/hooks/pre-revprop-change |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
18 svnsync init file://`pwd`/$repo $url |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
19 svnsync sync file://`pwd`/$repo |
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
20 } |
133
5b0b8ad2cb2c
vcs_functions: some versions of the shell don't like - in function names.
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
21 alias ez-svn-sync=ezsvnsync |
63
1b4067cc97ca
Add a function to svnsync easier. Done this too many times because of hgsubversion.
Augie Fackler <durin42@gmail.com>
parents:
62
diff
changeset
|
22 |
0 | 23 # Function to grab the url of an svn wc |
24 function svnurlof() { | |
25 local url | |
26 url=`svn info $1 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` | |
27 if [ x"$url" = "x" ] ; then | |
28 url=`git svn info $1 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` | |
29 fi | |
30 if [ x"$url" = "x" ] ; then | |
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
|
31 local dir |
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
|
32 dir=$1 |
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
|
33 if [ x"$dir" = "x" ] ; then |
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
|
34 dir="." |
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
|
35 fi |
0 | 36 url=`hg -R $dir svn info 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` |
37 fi | |
38 if [ x"$url" = "x" ] ; then | |
167
f485c32913cd
vcs functions: refer to hgsubversion by the real name
Augie Fackler <durin42@gmail.com>
parents:
156
diff
changeset
|
39 echo -n 'No repo found (tried svn, git-svn, hgsubversion)' |
0 | 40 fi |
41 echo $url | |
42 } | |
43 | |
44 # Function to clean locks out of svn wcs | |
45 function clean_svn_source_trees() { | |
46 for aa in */ ; do | |
47 pushd $aa > /dev/null | |
48 if [ -e .svn ] ; then | |
49 echo $aa 'is an svn checkout, cleaning' && svn cleanup | |
50 fi | |
51 popd > /dev/null | |
52 done | |
53 } | |
54 | |
55 # Function to update source trees of known VCS tools in the working dir. | |
56 # "known" means ones I'm forced to use on a regular basis | |
57 function update_source_trees() { | |
184
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
58 if ! ls -l | egrep ^d > /dev/null ; then |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
59 ls -l | egrep ^d |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
60 return |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
61 fi |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
62 local hgpath |
0 | 63 for aa in */ ; do |
31
a5691a22c92b
Fix a bug in update_source_trees where it could eat any existing dirstack
Augie Fackler <durin42@gmail.com>
parents:
16
diff
changeset
|
64 pushd $aa > /dev/null || continue |
0 | 65 if [ -e .svn ] ; then |
66 echo $aa 'is an svn checkout, updating' | |
67 svn up | |
115
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
68 elif [ -e README.txt ] \ |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
69 && [ -e format ] \ |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
70 && grep "This is a Subversion repository; use the 'svnadmin' tool to examine" README.txt > /dev/null \ |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
71 && svn pl --revprop -r 0 file://$(pwd) | fgrep svn:sync-from-url > /dev/null\ |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
72 ; then |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
73 echo "$aa looks like an svnsync clone, syncing" |
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
74 svnsync sync file://$(pwd) |
0 | 75 elif [ -e .git/svn ] ; then |
76 echo $aa 'is a git-svn checkout, updating' | |
77 git svn fetch | |
78 elif [ -e .git ] ; then | |
79 echo $aa 'is a git checkout, updating' | |
233
da06f9fd5016
update-source-trees: git fetch all remotes instead of doing git pull origin master
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
80 for remote in $(git remote) ; do |
da06f9fd5016
update-source-trees: git fetch all remotes instead of doing git pull origin master
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
81 git fetch $remote |
da06f9fd5016
update-source-trees: git fetch all remotes instead of doing git pull origin master
Augie Fackler <durin42@gmail.com>
parents:
210
diff
changeset
|
82 done |
0 | 83 elif [ -e .hg ] ; then |
184
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
84 echo $aa 'is an hg checkout, updating' |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
85 for hgpath in $(HGRCPATH=/dev/null hg paths | sed 's/.* = //g' | sort | uniq ) ; do |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
86 hg pull --update $hgpath |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
87 done |
35
7e9269048856
Fix update_source_trees to also pull versioned mq if it exists.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
88 if [ -e .hg/patches/.hg ] ; then |
7e9269048856
Fix update_source_trees to also pull versioned mq if it exists.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
89 echo $aa 'has an mq, updating that too...' |
7e9269048856
Fix update_source_trees to also pull versioned mq if it exists.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
90 hg -R .hg/patches pull -u |
7e9269048856
Fix update_source_trees to also pull versioned mq if it exists.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
91 fi |
0 | 92 elif [ -e _MTN ] ; then |
93 echo $aa "is an mtn co, updating" && mtn pull && mtn up | |
184
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
94 else |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
95 update_source_trees |
0 | 96 fi |
97 popd > /dev/null | |
98 done | |
99 } | |
115
5f00625aa1ed
Add support for svnsync to update_source_trees, alias update_source_trees to update-source-trees
Augie Fackler <durin42@gmail.com>
parents:
83
diff
changeset
|
100 alias update-source-trees=update_source_trees |
0 | 101 |
102 function vcs_current_branch() { | |
10
b4bfce76123f
Reorder these checks. With my home being in hg, it was winning over any other
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
103 git branch 2> /dev/null > /dev/null |
0 | 104 if [ $? = 0 ] ; then |
105 git branch --verbose | grep '^*' | sed 's/* //;s/ /:/;s/ .*//;s/:/ /' | |
106 return 0 | |
107 fi | |
108 # when wc-ng comes out, we'll probably do the following | |
109 # svn info 2> /dev/null > /dev/null | |
110 if [ -e .svn ] ; then | |
111 local d=`svn info | grep URL | sed 's/.*://'` | |
112 local br=`echo $d | awk '{ | |
113 if ( index($1, "trunk") ) { | |
114 print "trunk" | |
115 } else { | |
116 x = index($1, "branches") ; | |
117 if ( x != 0 ) { | |
118 sub(".*/branches/", ""); | |
119 sub("/.*", ""); | |
120 print $0 | |
121 } | |
122 } | |
123 }'` | |
124 local rev=`svn info | grep Revision | sed 's/.*: /r/'` | |
125 echo $br $rev | |
126 return 0 | |
127 fi | |
363
51aaf8bcd6ec
vcs_functions: fix vcs_current_branch to use hg templating
Augie Fackler <raf@durin42.com>
parents:
298
diff
changeset
|
128 hginfo=$(hg log -r . -T'{if(activebookmark,"{activebookmark}","{branch}")} {shortest(node)}') |
10
b4bfce76123f
Reorder these checks. With my home being in hg, it was winning over any other
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
129 if [ $? = 0 ] ; then |
363
51aaf8bcd6ec
vcs_functions: fix vcs_current_branch to use hg templating
Augie Fackler <raf@durin42.com>
parents:
298
diff
changeset
|
130 echo "$hginfo" |
10
b4bfce76123f
Reorder these checks. With my home being in hg, it was winning over any other
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
131 return 0 |
b4bfce76123f
Reorder these checks. With my home being in hg, it was winning over any other
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
132 fi |
0 | 133 return 1 |
134 } | |
135 | |
283
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
136 function find_dvcs_root() { |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
137 local hgroot=`hg root 2> /dev/null` |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
138 local gitroot=$(git rev-parse --show-toplevel 2> /dev/null) |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
139 local hglen=$(expr length $hgroot) |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
140 local gitlen=$(expr length $gitroot) |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
141 if [ $hglen -ge $gitlen ] ; then |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
142 if [ -n "$hgroot" ] ; then |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
143 echo $hgroot |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
144 return 0 |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
145 fi |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
146 else |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
147 if [ -n "$gitroot" ] ; then |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
148 echo $gitroot |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
149 return 0 |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
150 fi |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
151 fi |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
152 return 1 |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
153 } |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
154 |
0 | 155 # change to the root dir of the current wc |
156 function wcroot() { | |
283
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
157 local dvcsroot=$(find_dvcs_root) |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
158 if [ -n $dvcsroot ] ; then |
533bde18976e
find_dvcs_root: new function to find dvcs root dir more safely
Augie Fackler <durin42@gmail.com>
parents:
262
diff
changeset
|
159 cd $dvcsroot |
0 | 160 return 0 |
161 fi | |
162 if [ -e .svn ] ; then | |
163 while [ -e ../.svn ] ; do | |
164 cd .. | |
165 done | |
166 return 0 | |
167 fi | |
168 echo No working copy found'!' | |
169 } |