Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Limit the number of commits searched in tags and merge commits #2148

Closed
erikbra opened this issue Mar 1, 2020 · 0 comments · Fixed by #2149
Closed

Limit the number of commits searched in tags and merge commits #2148

erikbra opened this issue Mar 1, 2020 · 0 comments · Fixed by #2149
Milestone

Comments

@erikbra
Copy link
Contributor

erikbra commented Mar 1, 2020

Problem description

I noticed that running gitversion on a 5-year old, active codebase, I noticed that every time, TaggedCommitVersionStrategy and MergeMessageVersionStrategy were checking
evry single tag/merge message back until the beginning of time to figure out the correct increased version.
I figured this could not be necesasry.

I think this relates to #360, #1850, #1868.

TaggedCommitVersionStrategy

  INFO [03/01/20 12:45:28:72] Fallback base version: 0.1.0 with commit count source 4aaa7c02972ddc3b826d3466552ecab89fa4f6af (Incremented: None)
  INFO [03/01/20 12:45:30:63] Git tag '2020.6.4': 2020.6.4 with commit count source b8316d72ee8a3361084603fa958a0955170946c3 (Incremented: 2020.6.5)
  INFO [03/01/20 12:45:30:63] Git tag '2020.6.3': 2020.6.3 with commit count source 3f4b64ba597610c0e10722901446aaa896b6df1e (Incremented: 2020.6.4)
  INFO [03/01/20 12:45:30:64] Git tag '2020.6.2': 2020.6.2 with commit count source 8c6597a9a98c4e22ceb36c9135a0d36882b6bc28 (Incremented: 2020.6.3)
  INFO [03/01/20 12:45:30:65] Git tag '2020.6.1': 2020.6.1 with commit count source 5d096d1774d2d9886118d6b738ba9ee73fbec3b7 (Incremented: 2020.6.2)
  INFO [03/01/20 12:45:30:65] Git tag '2020.6.0': 2020.6.0 with commit count source e2c3960d7ee9ddc105da2d8b07fb3160a1b02973 (Incremented: 2020.6.1)
  INFO [03/01/20 12:45:30:66] Git tag '2020.5.4': 2020.5.4 with commit count source 8c625a4462b4bde1e0040d7f61bba572860c2c51 (Incremented: 2020.5.5)
  INFO [03/01/20 12:45:30:66] Git tag '2020.5.3': 2020.5.3 with commit count source 9e91b6ce931ad5a6494b5bfecfbb5da55b362109 (Incremented: 2020.5.4)
  INFO [03/01/20 12:45:30:67] Git tag '2020.5.2': 2020.5.2 with commit count source 196ca76fc20f91ab2c67801a3319720993b3fbb0 (Incremented: 2020.5.3)
  INFO [03/01/20 12:45:30:67] Git tag '2020.5.1': 2020.5.1 with commit count source 52c0dc2d179480961366534b7bdc06cb5b3eba6b (Incremented: 2020.5.2)
  INFO [03/01/20 12:45:30:68] Git tag '2020.5': 2020.5.0 with commit count source 722b5a1ffdc1a018b96e2f2607cc6d54604f72ed (Incremented: 2020.5.1)
  INFO [03/01/20 12:45:30:68] Git tag '2020.4.9': 2020.4.9 with commit count source a7ffcb36e2cae342ca4fb129129f6aa15ce4aa9a (Incremented: 2020.4.10)
  INFO [03/01/20 12:45:30:69] Git tag '2020.4.8': 2020.4.8 with commit count source 4eec2024de43b27f347ba38429b1d04d4f3af435 (Incremented: 2020.4.9)
  INFO [03/01/20 12:45:30:70] Git tag '2020.4.7': 2020.4.7 with commit count source eb8077ff7e85244434e7e8abd1ef50a7f7ef649a (Incremented: 2020.4.8)
  INFO [03/01/20 12:45:30:70] Git tag '2020.4.6': 2020.4.6 with commit count source 91c7561caa16bf5e693e25f8db9f646dce25fcef (Incremented: 2020.4.7)
  INFO [03/01/20 12:45:30:71] Git tag '2020.4.5': 2020.4.5 with commit count source 0f925b1cc3e10e661a1f7f317214b8aa97b6dbce (Incremented: 2020.4.6)
  INFO [03/01/20 12:45:30:71] Git tag '2020.4.4': 2020.4.4 with commit count source 29d7fe726d8bc7182d6514bca31a9a1b79dbdc0a (Incremented: 2020.4.5)
  INFO [03/01/20 12:45:30:72] Git tag '2020.4.3': 2020.4.3 with commit count source 5c107e9052972beda7f610c5782daf9b780a3fbc (Incremented: 2020.4.4)
  INFO [03/01/20 12:45:30:72] Git tag '2020.4.2': 2020.4.2 with commit count source 9a83e42c8e667798e859ef619da964df7f11bc92 (Incremented: 2020.4.3)
  INFO [03/01/20 12:45:30:73] Git tag '2020.4.1': 2020.4.1 with commit count source 677d865eae06d8195c43d269916babbf20822b0b (Incremented: 2020.4.2)
  (... and it goes all the way until the first tag in the repo)

MergeMessageVersionStrategy

 INFO [03/01/20 12:45:34:77] Merge message 'Merge branch 'releases/2020.6'': 2020.6.0 with commit count source cd9ee3796cca2481782d553900a475d8d63ee12a (Incremented: None)
  INFO [03/01/20 12:45:34:78] Merge message 'Merge branch 'releases/2020.6'': 2020.6.0 with commit count source dcc40e9ce0c02062e5a1bcc70a3ec0c2229f37ca (Incremented: None)
  INFO [03/01/20 12:45:34:78] Merge message 'Merge branch 'releases/2020.6'': 2020.6.0 with commit count source 67d84a5fc51777188cb34d97bb475e1f460e3324 (Incremented: None)
  INFO [03/01/20 12:45:34:78] Merge message 'Merge branch 'releases/2020.6'': 2020.6.0 with commit count source 89b10d65037f096f46b00282aced43fb23f5d42a (Incremented: None)
  INFO [03/01/20 12:45:34:79] Merge message 'Merge branch 'releases/2020.5' into develop': 2020.5.0 with commit count source 5336297443f04261e44f40021a42d0da2f0190a7 (Incremented: None)
  INFO [03/01/20 12:45:34:79] Merge message 'Merge branch 'releases/2020.5' into develop': 2020.5.0 with commit count source a47e121a3a776082a88c2311bde1ce3ec821760a (Incremented: None)
  INFO [03/01/20 12:45:34:79] Merge message 'Merge branch 'releases/2020.5' into develop': 2020.5.0 with commit count source 9d8df43a00285f1ccad5c64b9751ccbd4c86114a (Incremented: None)
  INFO [03/01/20 12:45:34:80] Merge message 'Merge branch 'releases/2020.5'': 2020.5.0 with commit count source 8d048d11fd5220548ea86d2228fc07efd8b21ca8 (Incremented: None)
  INFO [03/01/20 12:45:34:80] Merge message 'Merge branch 'releases/2020.5'': 2020.5.0 with commit count source efde702c6732fc4752802b8987a258767dfa85d6 (Incremented: None)
  INFO [03/01/20 12:45:34:80] Merge message 'Merge branch 'releases/2020.5' into develop': 2020.5.0 with commit count source e60803ae196d021b7da0843895a2092646868f79 (Incremented: None)
  INFO [03/01/20 12:45:34:80] Merge message 'Merge branch 'releases/2020.5'': 2020.5.0 with commit count source 1b0fc61781c82afae2f92ef26c19398cf7d10776 (Incremented: None)
  INFO [03/01/20 12:45:34:81] Merge message 'Merge branch 'releases/2020.4.3'': 2020.4.3 with commit count source 16c62c60eff76917bd9f6a56bb277a6197a76fbe (Incremented: None)
  INFO [03/01/20 12:45:34:81] Merge message 'Merge branch 'releases/2020.4.3'': 2020.4.3 with commit count source be93ab80d7d9d30a63235315b50ff5846380b8d5 (Incremented: None)
  INFO [03/01/20 12:45:34:81] Merge message 'Merge branch 'releases/2020.4.3' into develop': 2020.4.3 with commit count source de7d4146729ebd9dded74bcb7bd416517a53b54e (Incremented: None)
  INFO [03/01/20 12:45:34:81] Merge message 'Merge branch 'releases/2020.4.3' into develop': 2020.4.3 with commit count source 0b434d714193c33e14300499e6ed76e4321941e8 (Incremented: None)
  INFO [03/01/20 12:45:34:82] Merge message 'Merge branch 'releases/2020.4.3'': 2020.4.3 with commit count source 26d2a833a7f786c686e849cde1550248c791bec7 (Incremented: None)
  INFO [03/01/20 12:45:34:82] Merge message 'Merge branch 'releases/2020.4.3' into users/jose/task5802': 2020.4.3 with commit count source 70dcae7e4250badf8e683c0b19793f6fdcbaafef (Incremented: None)
  INFO [03/01/20 12:45:34:82] Merge message 'Merge branch 'releases/2020.4.3' into develop': 2020.4.3 with commit count source e51602906275eeef2f84be9a4a501838e9448254 (Incremented: None)
  INFO [03/01/20 12:45:34:82] Merge message 'Merge branch 'releases/2020.4.3'': 2020.4.3 with commit count source 99aa836a255c4f3fea852eeb6230ba5556cb4622 (Incremented: None)
  INFO [03/01/20 12:45:34:83] Merge message 'Merge branch 'releases/2020.4' into develop': 2020.4.0 with commit count source 2ae175bedd6787e326f482c1961a886389c6bb90 (Incremented: None)
  INFO [03/01/20 12:45:34:83] Merge message 'Merge branch 'releases/2020.4'': 2020.4.0 with commit count source 348a6643d3b64ef925489b32ddb7b2552216ff41 (Incremented: None)
  INFO [03/01/20 12:45:34:83] Merge message 'Merge branch 'releases/2020.3' - Release 2020.3.2': 2020.3.0 with commit count source ca61f393d5b7116595dac1f6b7217743e408f61a (Incremented: None)
  INFO [03/01/20 12:45:34:83] Merge message 'Merge branch 'releases/2020.3' into develop - Release 2020.3.2': 2020.3.0 with commit count source 2b163c0df4ef3fd6112701b5684eff27c392ecd2 (Incremented: None)
  INFO [03/01/20 12:45:34:84] Merge message 'Merge branch 'releases/2020.3'': 2020.3.0 with commit count source 09682df62233cf85d65455602b85ed1ce0bd637f (Incremented: None)
  INFO [03/01/20 12:45:34:84] Merge message 'Merge branch 'releases/2020.3' into develop': 2020.3.0 with commit count source d5db2d1aae3a80dc60f674107eaea866605efb12 (Incremented: None)
  INFO [03/01/20 12:45:34:84] Merge message 'Merge branch 'releases/2020.2'': 2020.2.0 with commit count source 0ebbde40d50314c9cc77f6f105b3426ba532783d (Incremented: None)
  INFO [03/01/20 12:45:34:85] Merge message 'Merge branch 'releases/2020.2' into develop': 2020.2.0 with commit count source 0a0758efcea47e9439c7399106fedfbabbd16b7b (Incremented: None)
  INFO [03/01/20 12:45:34:85] Merge message 'Merge branch 'releases/2020.2' into develop': 2020.2.0 with commit count source 21e27e285373e574bcbca3409d5bfad4ac3a8eb1 (Incremented: None)
  INFO [03/01/20 12:45:34:85] Merge message 'Merge branch 'releases/2020.2' into develop': 2020.2.0 with commit count source 31b8271b75c37dd032ca62252d4d8188b48e4f71 (Incremented: None)
  INFO [03/01/20 12:45:34:85] Merge message 'Merge branch 'releases/2020.2'': 2020.2.0 with commit count source 804afb4c4a5d20e8586a24648cab90cc3bb3a2c8 (Incremented: None)
  INFO [03/01/20 12:45:34:86] Merge message 'Merge branch 'releases/2020.1' into develop': 2020.1.0 with commit count source 9d8b0f03a17bf695d841af9e0753f972f330df91 (Incremented: None)
  INFO [03/01/20 12:45:34:86] Merge message 'Merge branch 'releases/2020.1'': 2020.1.0 with commit count source 33a645503ab7944f3e5c2da58032bea85ca6ab77 (Incremented: None)
  INFO [03/01/20 12:45:34:86] Merge message 'Merge branch 'releases/2020.1'': 2020.1.0 with commit count source c6facbae5f64e25c5be4422dd2a5f74e38d3e5d9 (Incremented: None)
  (... and it goes all the way until the first merge message in the repo)

Discussion

I have created a PR which "solves" the problem by taking only the 2 last tags/merge messages when trying to figure out the version. This seems a bit random.
Why not 1? Why not 10? Why not 50? If I take just 1, a unit test fails. But 2 makes all tests pass. Is this just a coincidence? Could we think of a scenario
where we would need 3? 5? or more? If so, are these very contrieved scenarios, so we should default to 2, and let it be configurable via a command-line option?

I am very humble as I don't always understand exactly all the rules GitVersion uses to figure out the versions. So I'd like some input on whether this fix
is madness or it actuelly makes sense.

Below are some measurements on some scenarios on my box and my repo (YMMV, of course).

Before fix:

Release branch:

C:\Users\Erik\Source\MyLargeProject [releases/2020.6 ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
22.3808131

Develop (a couple of weeks development ahead of master)

C:\Users\Erik\Source\MyLargeProject [develop ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
33.0933591

master

C:\Users\Erik\Source\MyLargeProject [master ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
16.6913539

Long-running feature branch (quite a bit behind master)

C:\Users\Erik\Source\MyLargeProject [users/erik/featureX ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
37.9425026

Detached head (taken from develop a long time ago and not updated for a long time)

C:\Users\Erik\Source\MyLargeProject [(b6f54a1...)]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
42.9764897

After fix

Release branch:

C:\Users\Erik\Source\MyLargeProject [releases/2020.6 ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
8.1732442

Develop (a couple of weeks development ahead of master)

C:\Users\Erik\Source\MyLargeProject [develop ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
9.0977455

master

C:\Users\Erik\Source\MyLargeProject [master ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
4.4504597

Long-running feature branch (quite a bit behind master)

C:\Users\Erik\Source\MyLargeProject [users/erik/featureX ≡]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
15.11804

Detached head (taken from develop a long time ago and not updated for a long time)

C:\Users\Erik\Source\MyLargeProject [(b6f54a1...)]> rm -r .\.git\gitversion_cache\; Measure-Command { dotnet run -c Release -f netcoreapp3.1 --project ..\Repos\GitVersion\src\GitVersionExe\GitVersionExe.csproj } | Select-Object -ExpandProperty TotalSeconds
33.5382094
@arturcic arturcic added this to the 5.2.0 milestone Mar 6, 2020
arturcic pushed a commit that referenced this issue Mar 6, 2020
Limit the number of commits traversed when trying to find version from
tags and merge messages to 2 (each).

Solves #2148
andrewabest added a commit to OctopusDeploy/GitVersion that referenced this issue Oct 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants