Mercurial > dotfiles
annotate .shell.d/50.vcs_functions.sh @ 216:a01712792c2b
emacs requires: cleanup and organize a little
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Sat, 14 Aug 2010 20:42:58 -0500 |
parents | 0590f34b92a0 |
children | da06f9fd5016 |
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' | |
80 git pull origin master | |
81 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
|
82 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
|
83 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
|
84 hg pull --update $hgpath |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
85 done |
35
7e9269048856
Fix update_source_trees to also pull versioned mq if it exists.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
86 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
|
87 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
|
88 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
|
89 fi |
0 | 90 elif [ -e _MTN ] ; then |
91 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
|
92 else |
efa2bfc73d2d
update-source-trees: recurse to find all VCS working copies
Augie Fackler <durin42@gmail.com>
parents:
169
diff
changeset
|
93 update_source_trees |
0 | 94 fi |
95 popd > /dev/null | |
96 done | |
97 } | |
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
|
98 alias update-source-trees=update_source_trees |
0 | 99 |
100 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
|
101 git branch 2> /dev/null > /dev/null |
0 | 102 if [ $? = 0 ] ; then |
103 git branch --verbose | grep '^*' | sed 's/* //;s/ /:/;s/ .*//;s/:/ /' | |
104 return 0 | |
105 fi | |
106 # when wc-ng comes out, we'll probably do the following | |
107 # svn info 2> /dev/null > /dev/null | |
108 if [ -e .svn ] ; then | |
109 local d=`svn info | grep URL | sed 's/.*://'` | |
110 local br=`echo $d | awk '{ | |
111 if ( index($1, "trunk") ) { | |
112 print "trunk" | |
113 } else { | |
114 x = index($1, "branches") ; | |
115 if ( x != 0 ) { | |
116 sub(".*/branches/", ""); | |
117 sub("/.*", ""); | |
118 print $0 | |
119 } | |
120 } | |
121 }'` | |
122 local rev=`svn info | grep Revision | sed 's/.*: /r/'` | |
123 echo $br $rev | |
124 return 0 | |
125 fi | |
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
|
126 hg branch 2> /dev/null > /dev/null |
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
|
127 if [ $? = 0 ] ; then |
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
|
128 local br=`hg branch | head -c 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 local rid=`hg parents | head -n 1 | awk '{print $2}' | head -c 7` |
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
|
130 echo "$br $rid" |
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 | |
136 # change to the root dir of the current wc | |
137 function wcroot() { | |
138 local root=`hg root 2> /dev/null` | |
139 if [ x$root != 'x' ] ; then | |
140 cd $root | |
141 return 0 | |
142 fi | |
143 git branch 2> /dev/null > /dev/null | |
144 if [ $? = 0 ] ; then | |
145 while [ ! -e .git ] ; do | |
146 cd .. | |
147 done | |
148 return 0 | |
149 fi | |
150 if [ -e .svn ] ; then | |
151 while [ -e ../.svn ] ; do | |
152 cd .. | |
153 done | |
154 return 0 | |
155 fi | |
156 echo No working copy found'!' | |
157 } |