← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] Fixed a False BZR Version Number Built From Local Branch of GIT-Source-Mirror

 


@Wayne & @Nick,

Attached you can find the new patch file that I've incorporated the
Nick's inputs.

Thanks,

--Joe


On 09/11/2015 08:27 AM, Wayne Stambaugh wrote:
Joseph,

Please make these changes and resubmit your patch and I will commit it.

Thanks,

Wayne

On 9/11/2015 10:19 AM, Nick Østergaard wrote:
Hi Joseph

Yes, I agree with you and understand the reasoning. I was just not
able to see the file patched and only reviewed the patch file itself.
I have now tried to apply it.

Some comments:

1. The line just before "# Get origin Repo HEAD" should probably be an
empth line to match the rest of the execute_process'.

2. We also create a long hash variable, although it is not used
anywhere else than for the cmake messaging, but we should probably me
explicit on which exact has that is. As is not that is a _LOCAL hash.
This to match the short hash.

If you adjust those two points, I think it is fine to merge it.

2015-09-11 10:16 GMT+02:00 Joseph Chen <joseph.chen59@xxxxxxxxx>:
Hi Nick,

I very much like the true BZR version number that is produced by your script
when compiling from the git mirror source.  This is very helpful when
tracking the matching version of KiCAD from the bzr repo.

In the new way that I proposed for producing BZR version number, I pretty
much borrowed the tick that is being used by Linux kernel: when a cloned
local source tree is the same as the up stream's, the version string is like
"3.2.1" as the official release number. But,  after some changes, the
version string becomes "3.2.1-dirty-f6cd3", where "f6cd3" is the short hash
of the local head.  This means that the version is not official release any
more.

I hope this trivial patch can help in distinguish a true BZR version from
those with local modifications.

--Joe


On 09/10/2015 05:54 PM, Nick Østergaard wrote:
Hi

This is a matter of what we really want. When I wrote the logic at
first, my goal was just to make sure to generate a bzr version that
matches how the bzr cmake module did it, when building with an
unmodified tree. I think my version complies to that; that is not
taking care about weather or not you are on a local banch.

I have not tested this patch, but it looks alright to me. I am fine
with extending it with this detail, although one could argue that
holding the bzr rev as is, is not entirely correct, but if you get the
complete version string you can deduce that there are changes. For
example as you state the HEAD for the bzr number, you could also state
the HEAD and origin/HEAD for the bzr number, like, BZR 1234-1236 if
you have two commits in difference from the product branch.

I am ok with either, but some people might find it odd as is.

But I think the patch is not complete, the auxilarry variables should
probably be of the last local commit. That is the variables like
_git_LAST_COMITTER and _git_LONG_HASH. (Maybe they are ok, hard to see
properly in the patch only, I did not apply it.)

Nick

2015-09-10 17:15 GMT+02:00 Wayne Stambaugh <stambaughw@xxxxxxxxx>:
@Nick, have you had a chance to look at this patch?  Since you wrote
this I thought you should have some input.  I'm not sure if this the
correct behavior when using git to generate the KiCad version string.
It seems as though Joseph is correct.  Would you please take a look at
it when you get a chance and let me know if it should be committed.

Thanks,

Wayne

On 8/30/2015 4:24 PM, Joseph Chen wrote:
Please review and apply the attached patch file of
CreateGitVersion.cmake.

*Issue to be fixed: a False BZR version number**
*
The details:
After cloning the repo of git-source-mirror, and working in my own local
branch, and committing a X times, the BZR version-number that is
generated by file CreateGitVersion.cmake is incremented by X number.
This is a mismatch of the true BZR number.

The tests:
_Before applying this patch_:

The command "Copy Version Info" built from the origin "master" branch
displays the following:
          Version: (2015-08-30 *BZR 6134, Git 4e94d52*)-product release
build
which is correct.

_However_, after creating a local branch based off the "master" branch,
and having committed 2 more times in the local branch, the command "Copy
Version Info" built from the local branch displays the following false
BZR number:
          Version: (2015-08-30 *BZR 6136, Git edfb32e*)-product release
build
which is _false_, because at the time the official BZR number is only
*6134*.


_After applying this_patch_:
The command "Copy Version Info" built from the "master" branch displays
the following:
           Version: (2015-08-30 *BZR 6134, Git 4e94d52*)-product release
build
which is still correct.

Now, the command "Copy Version Info" built from the local branch that
has 2 extra commits displayes the following:
          Version: (2015-08-30 *BZR 6134, Git 4e94d52-ede23f9*)-product
release build
which is still correct with a _true_ *BZR 6134*, plus it has an *added
GIT short hash* from the local branch HEAD.

This added GIT short hash tells us that the running version is built
based off a true BZR 6134, plus some local modifications up to GIT short
hash of *ede23f9.*

--Joe


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp




diff --git a/CMakeModules/CreateGitVersionHeader.cmake b/CMakeModules/CreateGitVersionHeader.cmake
index 42cf4b4..b53266d 100644
--- a/CMakeModules/CreateGitVersionHeader.cmake
+++ b/CMakeModules/CreateGitVersionHeader.cmake
@@ -40,18 +40,28 @@ macro( create_git_version_header _git_src_path )
             ${GIT_EXECUTABLE} --no-pager log -1 HEAD
             --pretty=format:%H
             WORKING_DIRECTORY ${_git_src_path}
-            OUTPUT_VARIABLE _git_LONG_HASH
+            OUTPUT_VARIABLE _git_LONG_HASH_ORIGIN
             ERROR_VARIABLE _git_log_error
             RESULT_VARIABLE _git_log_result
             OUTPUT_STRIP_TRAILING_WHITESPACE)
 
         if( ${_git_log_result} EQUAL 0 )
+            # Get origin/HEAD hash:
+            execute_process(
+            COMMAND
+            ${GIT_EXECUTABLE} --no-pager log -1 origin/HEAD
+            --pretty=format:%h
+            WORKING_DIRECTORY ${_git_src_path}
+            OUTPUT_VARIABLE _git_SHORT_HASH_ORIGIN
+            OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+            # Get local HEAD hash:
             execute_process(
             COMMAND
             ${GIT_EXECUTABLE} --no-pager log -1 HEAD
             --pretty=format:%h
             WORKING_DIRECTORY ${_git_src_path}
-            OUTPUT_VARIABLE _git_SHORT_HASH
+            OUTPUT_VARIABLE _git_SHORT_HASH_LOCAL
             OUTPUT_STRIP_TRAILING_WHITESPACE)
 
             execute_process(
@@ -70,19 +80,29 @@ macro( create_git_version_header _git_src_path )
             OUTPUT_VARIABLE _git_LAST_CHANGE_LOG
             OUTPUT_STRIP_TRAILING_WHITESPACE)
 
+            # Get origin Repo HEAD (matched official BZR number) Version Number:
+            execute_process(
+            COMMAND
+            ${GIT_EXECUTABLE} rev-list origin/HEAD --count
+            --first-parent
+            WORKING_DIRECTORY ${_git_src_path}
+            OUTPUT_VARIABLE _git_SERIAL_ORIGIN
+            OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+            # Get local Repo HEAD (matched official BZR number) Version Number:
             execute_process(
             COMMAND
             ${GIT_EXECUTABLE} rev-list HEAD --count
             --first-parent
             WORKING_DIRECTORY ${_git_src_path}
-            OUTPUT_VARIABLE _git_SERIAL
+            OUTPUT_VARIABLE _git_SERIAL_LOCAL
             OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-            message(STATUS "Git hash: ${_git_LONG_HASH}")
+            message(STATUS "Git hash: ${_git_LONG_HASH_ORIGIN}")
 
             if( ${_git_log_result} EQUAL 0 )
                 string( REGEX REPLACE "^(.*\n)?revno: ([^ \n]+).*"
-                        "\\2" Kicad_REPO_REVISION "BZR ${_git_SERIAL}, Git ${_git_SHORT_HASH}" )
+                        "\\2" Kicad_REPO_REVISION "BZR ${_git_SERIAL_ORIGIN}, Git ${_git_SHORT_HASH_ORIGIN}" )
                 string( REGEX REPLACE "^(.*\n)?committer: ([^\n]+).*"
                         "\\2" Kicad_REPO_LAST_CHANGED_AUTHOR "${_git_LAST_COMITTER}")
                 string( REGEX REPLACE "^(.*\n)?timestamp: [a-zA-Z]+ ([^ \n]+).*"
@@ -98,7 +118,13 @@ macro( create_git_version_header _git_src_path )
     if( Kicad_REPO_LAST_CHANGED_DATE )
         string( REGEX REPLACE "^([0-9]+)\\-([0-9]+)\\-([0-9]+)" "\\1-\\2-\\3"
                 _kicad_git_date ${Kicad_REPO_LAST_CHANGED_DATE} )
-        set( KICAD_BUILD_VERSION "(${_kicad_git_date} ${Kicad_REPO_REVISION})" )
+
+        if( ${_git_SHORT_HASH_LOCAL} EQUAL ${_git_SHORT_HASH_ORIGIN} )
+            set( KICAD_BUILD_VERSION "(${_kicad_git_date} ${Kicad_REPO_REVISION})" )
+        else()
+            message(STATUS "Your local git repo is different from the origin")
+            set( KICAD_BUILD_VERSION "(${_kicad_git_date} ${Kicad_REPO_REVISION}-${_git_SHORT_HASH_LOCAL})" )
+        endif()
     endif()
 
     set( KICAD_BUILD_VERSION ${KICAD_BUILD_VERSION} )

Follow ups