Thingy Ma Jig is the blog of Nicholas Thompson and contains any useful tips, sites and general blog-stuff which are considered interesting or handy!
Posted on 11 March 2009 in
tip
svn
linux
How to
geek
Drupal
This morning I updated a site to the latest release of Drupal 5.16. Nothing special there at all. I’ve done that many times as has (hopefully) mabye other drupal devs… However, I’m a bit of a newbie when it comes to SVN. Didn’t I mention this drupal site was in an SVN repository? ;-)
So, I’ve svn copy
‘d the trunk to an “update_to_5.16
” branch, checked out this branch and done a cvs up -dP -r DRUPAL-5-16
. Everything is going according to plan so far. Next I run svn status
to get a list of files which I need to mark as added or deleted (or to list anything else which has gone wrong). What happens next is I get a list of hundreds of CVS Template files which have been added to the CVS folders. For example:
? profiles/default/CVS/Template
M profiles/default/CVS/Entries
M profiles/default/CVS/Tag
? profiles/CVS/Template
M profiles/CVS/Tag
? themes/bluemarine/CVS/Template
M themes/bluemarine/CVS/Entries
M themes/bluemarine/CVS/Tag
M themes/engines/phptemplate/phptemplate.engine
? themes/engines/phptemplate/CVS/Template
M themes/engines/phptemplate/CVS/Entries
M themes/engines/phptemplate/CVS/Tag
? themes/engines/CVS/Entries.Log
? themes/engines/CVS/Template
M themes/engines/CVS/Tag
? themes/garland/images/CVS/Template
M themes/garland/images/CVS/Entries
M themes/garland/images/CVS/Tag
? themes/garland/minnelli/CVS/Template
M themes/garland/minnelli/CVS/Entries
M themes/garland/minnelli/CVS/Tag
? themes/garland/minnelli/color/CVS/Template
M themes/garland/minnelli/color/CVS/Entries
M themes/garland/minnelli/color/CVS/Tag
? themes/garland/CVS/Template
...
...
So as you can see from this (shortened) list, several Entries & Tag files have been modified (along with 1 core file). The files labelled with a ? are ones which are new in the Working Copy which are not in the SVN repository.
Now those who know me or read my blog may know I dont enjoy tedious jobs. I think the definition of tedious could be described as typing svn add themes/garland/minnelli/CVS/Template
hundreds of times (for each ? file in list which was much longer that than). What do I do when I have to do tedious jobs? I find a bash script which will do it for me and then blog about it!
So, firstly, I tried piping the svn st
results through grep to filter out the results which need adding. I also add a filter to only add Template entries to start with.
svn st | grep ^? | grep Template$
The svn st
is short-hand for svn status
.
Next we need to strip out the question marks and spaces at the beginning of each line. Enter gawk
. I’m not an expert at gawk
, but this time it seemed to Just WorkTM.
svn st | grep ^? | grep Template$ | gawk '{ print $2 }'
I then trid to just pipe that into svn add
. Subversion did not appreciate this and complained about there not being enough arguments. “Ok”, I thought — I’ve seen this problem before when trying to work with the results of a list of files produced by the find
command… What about the xargs
command? Would you adam and eve it? It worked!
$ svn st | grep ^? | grep Template$ | gawk '{ print $2 }' | xargs svn add
A profiles/default/CVS/Template
A profiles/CVS/Template
A themes/bluemarine/CVS/Template
A themes/engines/phptemplate/CVS/Template
A themes/engines/CVS/Template
A themes/garland/images/CVS/Template
A themes/garland/minnelli/CVS/Template
A themes/garland/minnelli/color/CVS/Template
A themes/garland/CVS/Template
A themes/garland/color/CVS/Template
A themes/CVS/Template
A themes/chameleon/CVS/Template
A themes/chameleon/marvin/CVS/Template
A themes/pushbutton/CVS/Template
A scripts/CVS/Template
A sites/default/CVS/Template
A sites/all/CVS/Template
A sites/CVS/Template
A misc/farbtastic/CVS/Template
A misc/CVS/Template
A CVS/Template
A includes/CVS/Template
A modules/aggregator/CVS/Template
A modules/blog/CVS/Template
A modules/system/CVS/Template
A modules/upload/CVS/Template
A modules/filter/CVS/Template
A modules/node/CVS/Template
A modules/drupal/CVS/Template
A modules/help/CVS/Template
A modules/forum/CVS/Template
A modules/book/CVS/Template
A modules/block/CVS/Template
A modules/statistics/CVS/Template
A modules/contact/CVS/Template
A modules/CVS/Template
A modules/tracker/CVS/Template
A modules/path/CVS/Template
A modules/ping/CVS/Template
A modules/locale/CVS/Template
A modules/profile/CVS/Template
A modules/watchdog/CVS/Template
A modules/comment/CVS/Template
A modules/menu/CVS/Template
A modules/legacy/CVS/Template
A modules/search/CVS/Template
A modules/throttle/CVS/Template
A modules/poll/CVS/Template
A modules/blogapi/CVS/Template
A modules/color/images/CVS/Template
A modules/color/CVS/Template
A modules/taxonomy/CVS/Template
A modules/user/CVS/Template
Brilliant! One line of commands joined together with a pipe and I have saved many, many minutes of tedious and bording typing!