<table><tr><td style="">sitter added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D24641">View Revision</a></tr></table><br /><div><div><p>Hm, how about separate functions though? With a single stat any given build still needs N process forks even when they only want 1 value.</p>

<blockquote style="border-left: 3px solid #8C98B8;
          color: #6B748C;
          font-style: italic;
          margin: 4px 0 12px 0;
          padding: 8px 12px;
          background-color: #F8F9FC;">
<div style="font-style: normal;
          padding-bottom: 4px;">In <a href="https://phabricator.kde.org/D24641#548394" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D24641#548394</a>, <a href="https://phabricator.kde.org/p/thomasfischer/" style="
              border-color: #f1f7ff;
              color: #19558d;
              background-color: #f1f7ff;
                border: 1px solid transparent;
                border-radius: 3px;
                font-weight: bold;
                padding: 0 4px;">@thomasfischer</a> wrote:</div>
<div style="margin: 0;
          padding: 0;
          border: 0;
          color: rgb(107, 116, 140);"><p>To clarify <tt style="background: #ebebeb; font-size: 13px;">ECM_SOURCE_VERSION_CONTROL_COMMIT_COUNT</tt>: it counts the number of commits in direct line of succession from the repository's initialization to the current commit. It does not include commits in other branches. Basically the number of commits listed in a plain <tt style="background: #ebebeb; font-size: 13px;">git log</tt>. The commit count gives a quick indication of the progress of a repository (or branch) without requiring to look up the repo's commit messages or hashes.</p></div>
</blockquote>

<p>I understand. This is super heavy though. I have just run it on all clones I have on this PC and for some repos that takes upwards of half a second to complete... on an SSD, so I also ran a quick check on our CI servers, which use HDDs and there it takes at least half a second with some repos (e.g. kdevelop) going up to 26 seconds (uncached)! I wouldn't mind terribly if the various things got split into their own functions (ecm_source_version_control_revison, ecm_source_version_control_branch, ecm_source_version_control_commit_count... or some names like that) but even then I have to question the use case behind the commit count information. So, what is the use case? What do you do with this information? It occurs to me that if you know the hash you could look up the commit count of that hash should you need it, but I struggle to imagine a scenario where that number is relevant.</p></div></div><br /><div><strong>INLINE COMMENTS</strong><div><div style="margin: 6px 0 12px 0;"><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="padding: 0; background: #F7F7F7; border-color: #e3e4e8; border-style: solid; border-width: 0 0 1px 0; margin: 0;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><a style="float: right; text-decoration: none;" href="https://phabricator.kde.org/D24641#inline-140620">View Inline</a><span style="color: #4b4d51; font-weight: bold;">ECMSourceVersionControl.cmake:70</span></div>
<div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span style="color: #304a96">message</span><span class="p">(</span><span style="color: #766510">STATUS</span> <span style="color: #766510">"Source directory '${CMAKE_SOURCE_DIR}' is under version control by Git."</span><span class="p">)</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">        <span style="color: #304a96">find_program</span><span class="p">(</span><span style="color: #766510">GIT_EXECUTABLE</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: rgba(151, 234, 151, .6);">            <span style="color: #766510">NAMES</span> <span style="color: #766510">git.bat</span> <span style="color: #766510">git</span> <span style="color: #74777d"># for Windows, 'git.bat' must be found before 'git'</span>
</div></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">I think you are leaking this variable into the parent scope. I am not super sure how to deal with this but I think I've seen <tt style="background: #ebebeb; font-size: 13px;">_</tt>prefixes, or you use a function and explicitly forward into the PARENT_SCOPE (<a href="https://cmake.org/cmake/help/v3.0/command/set.html" class="remarkup-link" target="_blank" rel="noreferrer">https://cmake.org/cmake/help/v3.0/command/set.html</a>).</p>

<p style="padding: 0; margin: 8px;">Alternatively with a multi-function approach I'd probably just make it ECM_SOURCE_VERSION_CONTROL_EXECUTABLE so it only needs finding on the first call.</p></div></div></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R240 Extra CMake Modules</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D24641">https://phabricator.kde.org/D24641</a></div></div><br /><div><strong>To: </strong>thomasfischer, sitter, kossebau<br /><strong>Cc: </strong>kde-frameworks-devel, kde-buildsystem, LeGast00n, GB_2, bencreasy, michaelh, ngraham, bruns<br /></div>