2

I have a long list of commits to make and, as such, would like to stagger the commits. So, when I do:

svn st | ack '^M'

I would like to commit these files only

Is this possible through the command line?

crmpicco
  • 16,605
  • 26
  • 134
  • 210

1 Answers1

10

The xargs command is useful for this kind of thing.

Assuming you don't have any filenames containing space characters, you can do:

svn st | sed -n 's/^M//p' | xargs svn commit

If you do have space characters in filenames, the sed command becomes a little more complex, to add quotes around each filename:

svn st | sed -n 's/$/"/; s/^M */"/p' | xargs svn commit

(I'm not familiar with ack -- perhaps it could be also be used in place of sed in these examples)

slowdog
  • 6,076
  • 2
  • 27
  • 30
  • If not -u or -v options are specified, the number of characters before the start of filename is known (it's 8), so sed can be simplified: svn st | grep '^M' | sed 's/.\{8\}\(.*\)/\1/' | xargs svn ci – malenkiy_scot Apr 19 '12 at 11:46
  • All depends on your definition of "simple", I suppose ;-) – slowdog Apr 19 '12 at 12:18
  • Excellent, the first example with sed worked well. I tried using ack, which is my preferred tool of choice normally, but I couldn't get it working. Thanks. – crmpicco Apr 19 '12 at 12:42