Mercurial > dotfiles
annotate .shell.d/50.vcs_functions.sh @ 378:20e47bc8eea9
hgrc: disable hg-git and hgsubversion
It hasn't been common for me to use either of these extensions for
some time, so just drop both of them from the main hgrc. Instead I'll
enable them as-needed in individual repositories.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Thu, 09 Jun 2011 20:20:04 -0500 |
parents | 354d05616d65 |
children | 980b3df541cd |
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 | |
368
354d05616d65
vcs_funcs: fix for when in no repo
Augie Fackler <raf@durin42.com>
parents:
363
diff
changeset
|
128 hginfo=$(hg log -r . -T'{if(activebookmark,"{activebookmark}","{branch}")} {shortest(node)}' 2>/dev/null) |
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 } |