Search

29 May, 2018

SVN commands you must know as an Test Automation Engineer


In the course of automation and continuous integration , you will someday come across a stage where you have to perform svn operations . And obviously, using command line (forget fancy UIs to do your business) using command line. And then you will have to start digging in,  which will take a substantial amount time ...believe me.

This happened with me recently, and I swore to myself, I cannot repeat this search and rescue operation.

The basic svn operations you must be using everyday are:

  •  Checkout 
  •  Export
  •  Add files 
  •  Commit
  •  Info
  •  Status
  •  Update
  •  Get properties
  •  Set properties
  •  log
  •  list
  •  revert

Lets say, you are automating a testing activity. You basic steps must be:

  •  Get the firmware to be tested (from svn or some repo)
  •  Get test code (again from repo)
  •  Run your test
  •  Commit test results into a Tag or send a report
     For 3 of above tasks,  you are going to need to use a lot of svn commands

Export or Checkout ?

Before you start, you must decide to checkout or export your repositories. 
If you need to commit any of the files you have brought in, then you should always "checkout" . 
If you just need to run an operation , then get the result and save it to some other location or may be mail it, then just use "export" .


 Checkout an svn repo                                           

svn checkout url destination

url is the link for the repository
destination is the location where you want to save. 

Wana checkout a particular revision?

Add a "@revision_number "at the end of the url . 
Or 
Add a -r revision_number url

Full syntax:


svn checkout -r rev_number url destination

Note that: If you don't mention a destination, then a folder of that same url path will be created.

 Export an svn repo (Download locally)

svn export url destination


  Add a local folder/file on an svn repo.


svn import url destination

 Note: If the folder specified in the url doesn't exist, it will be created.


 Add files to commit

Note: This is for adding new files only . This is NOT for adding Modified files (git users....pay attention)

svn add file_path

file_path may be full or just file name  

"Add" here means, staging all files with changes or new files created, that we want to add/update in svn repo. 

 Commit changes

svn commit -m "Committing changes"

-m means , message. It has to be in quotes.

This step can only be done successfully if we have added some files using "svn add" in staging area.

 Commit only one or a list of files

Commit a file (or files)  with changes . The files has to PRE-EXIST. 


svn ci -m "Committing changes" filename1 filename2

This one can be used when I want only a selected list of files.

 Get information about the svn repo

svn info 

svn info gives you lot of information , like revision number, url etc. Here is an example output.

"E:/my_repo> svn info or svn info url"


Path: .
Working Copy Root Path: E:\my_repo
URL: http://mysvn.tt.in.mycompany/svn/sy/libraries/esw/products/some1/software/test/implement_exec/tools/Jenkins/trunk
Relative URL: ^/libraries/abc/products/productX/software/test/implement_exec/tools/Jenkins/trunk
Repository Root: http://mysvn.tt.in.mycompany/svn/sy
Repository UUID: f83c4b24-5c02-0410-a495-ade9de72abc1
Revision: 161633
Node Kind: directory
Schedule: normal
Last Changed Author: thearc31
Last Changed Rev: 159485
Last Changed Date: 2015-12-03 20:34:15 +0530 (Thu, 03 Dec 2015)

As you can see, a lot of info can be obtained through this command. 

Status

This is a little different than info. This command shows the files that have changes or the ones that are not added yet.

svn status

E:\MyFolder>svn status

A       Project\forms.py
A       Project\static\css\custom
A       Project\static\css\custom\mystyle.css
A       Project\views\view_user.py
M       Project\views\view_project.py
A       templatesProject\home.html
A       templatesProject\profile.html


 Update a repo


svn update

               or
svn update Directory_path


E.g: svn update E:/Myfolder

This is to update our local checkout folder . We should always do this before we commit .

 Get properties of a svn repo

svn propget svn:property_name

You might need to see the properties of a repo . Note that the properties start with "svn:"
There are many available. 
Let's say you want to see, what files or extensions have been ignored for a particular repo. 
So you can try:

E:\My_Branches\Trunk>svn propget svn:ignore
*.idea
 
 As you see, it shows me that files starting with .idea have been ignored for this repository.
There are many properties available. Here's are few other popular ones:

  •  svn propget svn:externals
  •  svn propget svn:log
  •  svn propget svn:mergeinfo
This is how you can cross verify manually.

  •  Right click inside the repo directory and select "properties". A new window will popup.
  •  Click on the "Subversion" tab.


  • Click on button "Properties..." at the bottom left.
  • Note the columns "Property" and "Value".

 Set properties of a svn repo

svn propset svn:property_name property

You can set the properties of a repo through command line. You might need this if you are trying to bunch a number of links into one common folder. In that case, you can make a list of urls and set them as external properties. 

Example: This is an example of setting external properties of a repo using a text file, while has all the links you want to set as properties.

svn propset svn:externals . -F links.txt 

This is a vast topic. You can explore more on this on the svn help links.

 Get svn logs

Get latest logs if you need although, I doubt you will ever need this for automation..But then who knows. 

svn log

To get only limited number of latest logs , you can use :

Syntaxsvn log --limit n 

Where n is an integer . 

 Get list of folders in svn url

Get a list of all folders inside an svn url (It can be a branch or tag or a folder). It needs to be directory.


svn list url


Remove files from repo

Remove a file permanently from the repository.

svn rm/del/delete -m "message" path

Note: Double quotes to be used for comment, NOT single quote



Revert changes

Sometimes, we want to throw away the changes made to a file. This is for bringing the file to the same state before you started making changes.

svn revert filename

No comments:

Post a Comment