Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increment version in a text file

I have a text file that contains only one line with a version number of my application. An example would be 1.0.0.1. I would like to increment the build number. Using my example I would get the output 1.0.0.2 in the same text file.

How can I do it with PowerShell?

like image 441
mfuxi Avatar asked May 12 '15 15:05

mfuxi


People also ask

What is semantic versioning?

Definition from Semantic versioning ( https://semver.org/) Given a version number MAJOR.MINOR.PATCH-pre_release-label, increment the: MAJOR version when you make incompatible API changes MINOR version when you add functionality in a backward-compatible manner PATCH version when you make backward-compatible bug fixes.

What is the difference between major version and patch version?

Given a version number MAJOR.MINOR.PATCH-pre_release-label, increment the: MAJOR version when you make incompatible API changes MINOR version when you add functionality in a backward-compatible manner PATCH version when you make backward-compatible bug fixes.

How to filter git history by version in VCS?

You have just to assign a git tag to it. Then you can filter git history by tags in any VCS UI. Somehow you have to keep actual version string. The easiest way is to keep it in a text file in the root of the repository. The policies of VERSION file:

How to define a release except for the Git tag?

The next step is to define how the release would be represented in GIT history except for the git tag. There are several techniques to achieve this, the most popular are separate release branch or detached commit. In this post, we will be discussing detached commit because it could much easier be automated (no merge needed).


1 Answers

This might be over kill, but it shows the use of the type [version] which will save the need to do string manipulation.

$file = "C:\temp\File.txt"
$fileVersion = [version](Get-Content $file | Select -First 1)
$newVersion = "{0}.{1}.{2}.{3}" -f $fileVersion.Major, $fileVersion.Minor, $fileVersion.Build, ($fileVersion.Revision + 1)
$newVersion | Set-Content $file

The file contents after this would contain 1.0.0.2. The unfortunate part about using [version] is that the properties are read-only, so you can't edit the numbers in place. We use the format operator to rebuild the version while incrementing the Revision by one.

On the off chance there is some whitespace or other hidden lines in the file we ensure we get the first line only with Select -First 1.

One of several string manipulation based solution would be to split the contents into an array and then rebuild it after changes are made.

$file = "C:\temp\File.txt"
$fileVersion = (Get-Content $file | Select -First 1).Split(".")
$fileVersion[3] = [int]$fileVersion[3] + 1
$fileVersion -join "." | Set-Content $file

Split the line on its periods. Then the last element (third) contains the number you want to increase. It is a string so we need to cast it as an [int] so we get an arithmetic operation instead of a string concatenation. We then rejoin with -join.

like image 149
Matt Avatar answered Oct 02 '22 05:10

Matt