From 05a51dbcd4279f1d0ba0253b40e0f272647e1bb8 Mon Sep 17 00:00:00 2001 From: "bot@clarius.org" Date: Tue, 18 Feb 2025 23:44:51 +0000 Subject: [PATCH] Publish pages from devlooped/GitInfo@6db242c87 --- assets/css/style.css | 275 ++++++++++++++ assets/images/bg_hr.png | Bin 0 -> 78 bytes assets/images/blacktocat.png | Bin 0 -> 463 bytes assets/images/git.png | Bin 0 -> 1038 bytes assets/images/git.svg | 3 + assets/images/icon_download.png | Bin 0 -> 216 bytes assets/images/sprite_download.png | Bin 0 -> 14832 bytes assets/images/tooltip.png | Bin 0 -> 8515 bytes changelog.html | 602 ++++++++++++++++++++++++++++++ changelog.md | 445 ++++++++++++++++++++++ index.html | 378 +++++++++++++++++++ license.txt | 22 ++ readme.md | 309 +++++++++++++++ 13 files changed, 2034 insertions(+) create mode 100644 assets/css/style.css create mode 100644 assets/images/bg_hr.png create mode 100644 assets/images/blacktocat.png create mode 100644 assets/images/git.png create mode 100644 assets/images/git.svg create mode 100644 assets/images/icon_download.png create mode 100644 assets/images/sprite_download.png create mode 100644 assets/images/tooltip.png create mode 100644 changelog.html create mode 100644 changelog.md create mode 100644 index.html create mode 100644 license.txt create mode 100644 readme.md diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..f764ecd --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,275 @@ +.highlight table td { padding: 5px; } + +.highlight table pre { margin: 0; } + +.highlight .cm { color: #777772; font-style: italic; } + +.highlight .cp { color: #797676; font-weight: bold; } + +.highlight .c1 { color: #777772; font-style: italic; } + +.highlight .cs { color: #797676; font-weight: bold; font-style: italic; } + +.highlight .c, .highlight .cd { color: #777772; font-style: italic; } + +.highlight .err { color: #a61717; background-color: #e3d2d2; } + +.highlight .gd { color: #000000; background-color: #ffdddd; } + +.highlight .ge { color: #000000; font-style: italic; } + +.highlight .gr { color: #aa0000; } + +.highlight .gh { color: #797676; } + +.highlight .gi { color: #000000; background-color: #ddffdd; } + +.highlight .go { color: #888888; } + +.highlight .gp { color: #555555; } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: #aaaaaa; } + +.highlight .gt { color: #aa0000; } + +.highlight .kc { color: #000000; font-weight: bold; } + +.highlight .kd { color: #000000; font-weight: bold; } + +.highlight .kn { color: #000000; font-weight: bold; } + +.highlight .kp { color: #000000; font-weight: bold; } + +.highlight .kr { color: #000000; font-weight: bold; } + +.highlight .kt { color: #445588; font-weight: bold; } + +.highlight .k, .highlight .kv { color: #000000; font-weight: bold; } + +.highlight .mf { color: #009999; } + +.highlight .mh { color: #009999; } + +.highlight .il { color: #009999; } + +.highlight .mi { color: #009999; } + +.highlight .mo { color: #009999; } + +.highlight .m, .highlight .mb, .highlight .mx { color: #009999; } + +.highlight .sb { color: #d14; } + +.highlight .sc { color: #d14; } + +.highlight .sd { color: #d14; } + +.highlight .s2 { color: #d14; } + +.highlight .se { color: #d14; } + +.highlight .sh { color: #d14; } + +.highlight .si { color: #d14; } + +.highlight .sx { color: #d14; } + +.highlight .sr { color: #009926; } + +.highlight .s1 { color: #d14; } + +.highlight .ss { color: #990073; } + +.highlight .s { color: #d14; } + +.highlight .na { color: #008080; } + +.highlight .bp { color: #797676; } + +.highlight .nb { color: #0086B3; } + +.highlight .nc { color: #445588; font-weight: bold; } + +.highlight .no { color: #008080; } + +.highlight .nd { color: #3c5d5d; font-weight: bold; } + +.highlight .ni { color: #800080; } + +.highlight .ne { color: #990000; font-weight: bold; } + +.highlight .nf { color: #990000; font-weight: bold; } + +.highlight .nl { color: #990000; font-weight: bold; } + +.highlight .nn { color: #555555; } + +.highlight .nt { color: #000080; } + +.highlight .vc { color: #008080; } + +.highlight .vg { color: #008080; } + +.highlight .vi { color: #008080; } + +.highlight .nv { color: #008080; } + +.highlight .ow { color: #000000; font-weight: bold; } + +.highlight .o { color: #000000; font-weight: bold; } + +.highlight .w { color: #bbbbbb; } + +.highlight { background-color: #f8f8f8; } + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; vertical-align: baseline; } + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } + +ol, ul { list-style: none; } + +table { border-collapse: collapse; border-spacing: 0; } + +/******************************************************************************* +Theme Styles +*******************************************************************************/ +body { box-sizing: border-box; color: #373737; background: #212121; font-size: 16px; font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; line-height: 1.5; -webkit-font-smoothing: antialiased; } + +h1, h2, h3, h4, h5, h6 { margin: 10px 0; font-weight: 700; color: #222222; font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; letter-spacing: -1px; } + +h1 { font-size: 36px; font-weight: 700; } + +h2 { padding-bottom: 10px; font-size: 32px; background: url("../images/bg_hr.png") repeat-x bottom; } + +h3 { font-size: 24px; } + +h4 { font-size: 21px; } + +h5 { font-size: 18px; } + +h6 { font-size: 16px; } + +p { margin: 10px 0 15px 0; } + +footer p { color: #f2f2f2; } + +a { text-decoration: none; color: #0F79D0; text-shadow: none; transition: color 0.5s ease; transition: text-shadow 0.5s ease; -webkit-transition: color 0.5s ease; -webkit-transition: text-shadow 0.5s ease; -moz-transition: color 0.5s ease; -moz-transition: text-shadow 0.5s ease; -o-transition: color 0.5s ease; -o-transition: text-shadow 0.5s ease; -ms-transition: color 0.5s ease; -ms-transition: text-shadow 0.5s ease; } + +a:hover, a:focus { text-decoration: underline; } + +footer a { color: #F2F2F2; text-decoration: underline; } + +em, cite { font-style: italic; } + +strong { font-weight: bold; } + +img { position: relative; margin: 0 auto; max-width: 739px; padding: 5px; margin: 10px 0 10px 0; border: 1px solid #ebebeb; box-shadow: 0 0 5px #ebebeb; -webkit-box-shadow: 0 0 5px #ebebeb; -moz-box-shadow: 0 0 5px #ebebeb; -o-box-shadow: 0 0 5px #ebebeb; -ms-box-shadow: 0 0 5px #ebebeb; } + +p img { display: inline; margin: 0; padding: 0; vertical-align: middle; text-align: center; border: none; } + +pre, code { color: #222; background-color: #fff; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; font-size: 0.875em; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; } + +pre { padding: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); overflow: auto; } + +code { padding: 3px; margin: 0 3px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } + +pre code { display: block; box-shadow: none; } + +blockquote { color: #666; margin-bottom: 20px; padding: 0 0 0 20px; border-left: 3px solid #bbb; } + +ul, ol, dl { margin-bottom: 15px; } + +ul { list-style-position: inside; list-style: disc; padding-left: 20px; } + +ol { list-style-position: inside; list-style: decimal; padding-left: 20px; } + +dl dt { font-weight: bold; } + +dl dd { padding-left: 20px; font-style: italic; } + +dl p { padding-left: 20px; font-style: italic; } + +hr { height: 1px; margin-bottom: 5px; border: none; background: url("../images/bg_hr.png") repeat-x center; } + +table { border: 1px solid #373737; margin-bottom: 20px; text-align: left; } + +th { font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; padding: 10px; background: #373737; color: #fff; } + +td { padding: 10px; border: 1px solid #373737; } + +form { background: #f2f2f2; padding: 20px; } + +kbd { background-color: #fafbfc; border: 1px solid #c6cbd1; border-bottom-color: #959da5; border-radius: 3px; box-shadow: inset 0 -1px 0 #959da5; color: #444d56; display: inline-block; font-size: 11px; line-height: 11px; padding: 3px 5px; vertical-align: middle; } + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ +.outer { width: 100%; } + +.inner { position: relative; max-width: 640px; padding: 20px 10px; margin: 0 auto; } + +#forkme_banner { display: block; position: absolute; top: 0; right: 10px; z-index: 10; padding: 10px 50px 10px 10px; color: #fff; background: url("../images/blacktocat.png") #0090ff no-repeat 95% 50%; font-weight: 700; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } + +#header_wrap { background: #212121; background: -moz-linear-gradient(top, #373737, #212121); background: -webkit-linear-gradient(top, #373737, #212121); background: -ms-linear-gradient(top, #373737, #212121); background: -o-linear-gradient(top, #373737, #212121); background: linear-gradient(to top, #373737, #212121); } + +#header_wrap .inner { padding: 50px 10px 30px 10px; } + +#project_title { margin: 0; color: #fff; font-size: 42px; font-weight: 700; text-shadow: #111 0px 0px 10px; } + +#project_tagline { color: #fff; font-size: 24px; font-weight: 300; background: none; text-shadow: #111 0px 0px 10px; } + +#downloads { position: absolute; width: 210px; z-index: 10; bottom: -40px; right: 0; height: 70px; background: url("../images/icon_download.png") no-repeat 0% 90%; } + +.zip_download_link { display: block; float: right; width: 90px; height: 70px; text-indent: -5000px; overflow: hidden; background: url(../images/sprite_download.png) no-repeat bottom left; } + +.tar_download_link { display: block; float: right; width: 90px; height: 70px; text-indent: -5000px; overflow: hidden; background: url(../images/sprite_download.png) no-repeat bottom right; margin-left: 10px; } + +.zip_download_link:hover { background: url(../images/sprite_download.png) no-repeat top left; } + +.tar_download_link:hover { background: url(../images/sprite_download.png) no-repeat top right; } + +#main_content_wrap { background: #f2f2f2; border-top: 1px solid #111; border-bottom: 1px solid #111; } + +#main_content { padding-top: 40px; } + +#footer_wrap { background: #212121; } + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ +@media screen and (max-width: 992px) { img { max-width: 100%; } } +@media screen and (max-width: 480px) { body { font-size: 14px; } + #downloads { display: none; } + .inner { min-width: 320px; max-width: 480px; } + #project_title { font-size: 32px; } + h1 { font-size: 28px; } + h2 { font-size: 24px; } + h3 { font-size: 21px; } + h4 { font-size: 18px; } + h5 { font-size: 14px; } + h6 { font-size: 12px; } + code, pre { font-size: 11px; } } +@media screen and (max-width: 320px) { body { font-size: 14px; } + #downloads { display: none; } + .inner { min-width: 240px; max-width: 320px; } + #project_title { font-size: 28px; } + h1 { font-size: 24px; } + h2 { font-size: 21px; } + h3 { font-size: 18px; } + h4 { font-size: 16px; } + h5 { font-size: 14px; } + h6 { font-size: 12px; } + code, pre { min-width: 240px; max-width: 320px; font-size: 11px; } } +.inner { max-width: 960px; } + +pre, code { background-color: unset; font-size: unset; } + +code { font-size: 0.80em; } + +h1 > img { border: unset; box-shadow: unset; vertical-align: middle; -moz-box-shadow: unset; -o-box-shadow: unset; -ms-box-shadow: unset; } diff --git a/assets/images/bg_hr.png b/assets/images/bg_hr.png new file mode 100644 index 0000000000000000000000000000000000000000..514aee5056a320b059a4b92fc31385b01f3fd707 GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&E!3HD~tNk5798VX=5Q)pl2@*yR?(8i7?>Hmz b1S7-U!)%xJ1CQbP0l+XkKg_jic literal 0 HcmV?d00001 diff --git a/assets/images/blacktocat.png b/assets/images/blacktocat.png new file mode 100644 index 0000000000000000000000000000000000000000..e160053a5bfc1f1891c5df1a04244b46132ed91c GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGW&u7Su0Z-f>EL7Xu|Ghaf+azI z!3+%h6VAUEXmGf1FkfMPe?Wo5`wP+x42q#I?$ zCZCHu*mLc{mj@jVb0qJie|tLrXx$RV*xy|DA2&%h)(GsqVy%>MraS!Shm183{#@F! zV^vm_@$^Y{GUuI-cUN0({K+A*SMX|j#GmyK98SEwQl?dz*($XqK|j>0;H2RlD{}=; zx7!XPy5}bEXEt-@-@Ngc#+nIgOgm!u=S(u>E&hLN(cd}Wb8P2o&P?9><1zE8l8pz9 zg==?S&3yIdUhdL~<_mg1Y!?@vTUiymeaGcy&vRcbOG}I6uI`9fxn}VP_6h8=I%b0Z Rq=4be;OXk;vd$@?2>`O9@hboT literal 0 HcmV?d00001 diff --git a/assets/images/git.png b/assets/images/git.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa06fe123643c0e9ede8a5403763c1533770e8e GIT binary patch literal 1038 zcmV+p1o8WcP)_LFi zQhuS6xVvrV*w!Z%_5%;xPy*+NnLe*ldtv&cqbl#08}nEDlXK&CR+PL)8&&wIT+e^$ zHKu2Ud@ulppigW}cCHO*<69|LkTq^QKA2wb&#%v|wG9O{ENa6d^w@#D;?>u;zj@_W z^TtXqQTwy9JUN>FLxgwmdHdWJ`XdzzhymE49pm;s_Kg4>9y|FmK)EqrQkBDmsMNop z5E$r=_|(K(69UjN^lZk=?(d-l4iRuiH=jC!z$xdtvj%|Z zBJfvO47hyDs;$b+snK*3VFsTyC2*-!&mZe+`)ewZ-U93ng8`4PeRoayS4u@T95vS9 zhp-q=(6A^)Us#_Tamfvf>9!vbe$yxL+GJw) + + \ No newline at end of file diff --git a/assets/images/icon_download.png b/assets/images/icon_download.png new file mode 100644 index 0000000000000000000000000000000000000000..5a793f17688b22d0c98f8b32855f69daff65afaf GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3^F3W0Lp+WrCrGd^PB3WLTm5|# z<3>ZVHGbLMPaA&Ni`7(Ic@)^~t}9m~#>{KX@F?FxM~Q7di>SquC^@HPOZ^)nnu6w= zPs-5Ln9{RS^v!FJ4Hk1|eLTx~WO~PjEv;gjQBoc84>y)53m9M4vW{f>=&v)a$*Fn% zwMt9Ivq1qGD=w^dyuiIx3lB69mQJ=Ex6cJ85q6@e`QPvJEsD4 ODubu1pUXO@geCwMBTRk( literal 0 HcmV?d00001 diff --git a/assets/images/sprite_download.png b/assets/images/sprite_download.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f8de24c1c49ce421a44ce2a24ac22d045a39fe GIT binary patch literal 14832 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 ZeC$-4BlW2OBO(A$l6xszA^qyj{{x*s9TNZm literal 0 HcmV?d00001 diff --git a/changelog.html b/changelog.html new file mode 100644 index 0000000..257d799 --- /dev/null +++ b/changelog.html @@ -0,0 +1,602 @@ + + + + + + + + + + +Changelog | GitInfo + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + View on GitHub + + +

GitInfo

+

Git and SemVer Info from MSBuild, C# and VB

+ + +
+
+ + +
+
+

Changelog

+ +

v3.5.0 (2024-11-02)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Question: Why we use git log with format to get the Current commit? #355
  • +
  • SetGitExe doesn’t recognize VS Git locations #324
  • +
  • Projects don’t rebuild after committing #322
  • +
  • New tag without version drop semver to zeros #319
  • +
  • Add vswhere fallback to locate git provided by VS #372 (@kzu)
  • +
  • Simplify IsDirty with newer typed constants in ThisAssembly #368 (@kzu)
  • +
  • Allow opting-out of GitBranch default in CI #366 (@kzu)
  • +
  • Set default GitBranch from CI env variables #365 (@kzu)
  • +
  • Using simpler git command to get current commit #356 (@kzu)
  • +
+ +

:hammer: Other:

+ +
    +
  • Using GitInfo with Ncrunch #345
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Adopt SL v2 via ThisAssembly.Constants and document in readme(s) #370 (@kzu)
  • +
  • +Mᐁ includes #367 (@devlooped-bot)
  • +
  • +Mᐁ includes #357 (@devlooped-bot)
  • +
  • Clean code #352 (@gitfool)
  • +
  • Remove redundant depends on targets #346 (@gitfool)
  • +
  • Fix fast up-to-date-check #343 (@gitfool)
  • +
  • Disable rogue command echo #342 (@gitfool)
  • +
+ +

v3.3.5 (2024-05-13)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Can not find all git info when on branch with ‘.’ in the name #328
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • ThisAssembly.Git.IsDirty is included when GitThisAssembly is false #337
  • +
  • Update to 3.3.4 via Nuget crashes #335
  • +
  • Git.Branch always gives [HEAD] for detached HEAD commit. #333
  • +
  • Do not emit ThisAssembly.Git.IsDirty when GitThisAssembly is false #338 (@kzu)
  • +
+ +

v3.3.4 (2024-02-15)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • GetInfo 3.3.3 fails like #273 (‘ThisAssembly.Git’ is inaccessible…) on non-SDK style .csproj, 2.3.0 works fine #326
  • +
  • Weird race condition with targets #321
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Fix race conditions #330 (@gitfool)
  • +
+ +

v3.3.3 (2023-08-30)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • parse(’’)” cannot be evaluated. version string portion was too short or too long #300
  • +
  • Shield from invalid git version #313 (@kzu)
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • +Mᐁ includes #315 (@devlooped-bot)
  • +
+ +

v3.3.2 (2023-08-30)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • LangVersion latest and using 11.0 constants #311
  • +
  • Privacy about SponsorLink with GitInfo #299
  • +
  • Linux compatibility issues? #298
  • +
  • Bump ThisAssembly to get fix for C#11 raw strings #312 (@kzu)
  • +
+ +

v3.3.1 (2023-08-11)

+ +

Full Changelog

+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Bump to downstream ThisAssembly without SponsorLink #305 (@kzu)
  • +
  • +Mᐁ includes #303 (@devlooped-bot)
  • +
+ +

v3.3.0 (2023-08-11)

+ +

Full Changelog

+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Remove current implementation of SponsorLink for now #302 (@kzu)
  • +
+ +

v3.2.0 (2023-08-11)

+ +

Full Changelog

+ +

v3.1.2 (2023-08-02)

+ +

Full Changelog

+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • replace all invalid chars in semver string with “-“ #295 (@smorokin)
  • +
+ +

v3.1.1 (2023-07-07)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • IsDirty is no more constant #287
  • +
  • IsDirty always false #285
  • +
+ +

v3.1.0 (2023-06-05)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • Ensure IsDirty is a constant #288 (@kzu)
  • +
+ +

v3.0.7 (2023-06-05)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Branch name is wrong when compiling from a git worktree #189
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • Version 3.0.5: Error ‘ThisAssembly.Git’ is inaccessible due to its protection level #273
  • +
+ +

v3.0.6 (2023-05-05)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Allow forcing templated code gen for C# #269 (@kzu)
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • The name ‘IsDirtyString’ does not exist in the current context #281
  • +
  • Update to version 3.x breaks Avalonia projects #260
  • +
  • CSC : error SL01: SponsorLink has been incorrectly configured #251
  • +
  • Fix missing code from missing dependency #282 (@kzu)
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Additional bump to get complete fix #283 (@kzu)
  • +
+ +

v3.0.5 (2023-03-22)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • ThisAssemblyNamespace is ignored when updating from 2.3.0 to 3.0.4 #258
  • +
  • Bump to ThisAssembly version that doesn’t run so early #268 (@kzu)
  • +
  • Fix IsDirty generator when using a custom namespace #267 (@kzu)
  • +
  • Fix backs-compat generation when custom namespace in use #266 (@kzu)
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • fix typo ‘alwas’ with ‘always’ #257 (@codingdave)
  • +
  • Set AzureDevOps branch name also for PR #256 (@trejjam)
  • +
+ +

v3.0.4 (2023-02-22)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • Branch Names with ‘/’ generate invalid versions #244
  • +
  • V3 IsDirty is a string #243
  • +
  • Migration from v2 -> v3 #240
  • +
  • Reintroduce IsDirty boolean property from 2.3 #249 (@kzu)
  • +
  • Replace / and \ in branches with dashes when setting default Version #248 (@kzu)
  • +
+ +

v3.0.2 (2023-02-18)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • 💜 Bump SponsorLink for better privacy #242 (@kzu)
  • +
+ +

v3.0.1 (2023-02-17)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Make sure we don’t surface SponsorLink as an API #241 (@kzu)
  • +
+ +

v3.0.0 (2023-02-16)

+ +

Full Changelog

+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Rename Analyzer > GitInfo.CodeAnalysis #233 (@kzu)
  • +
+ +

v3.0.0-rc (2023-02-09)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Set Version and PackageVersion to a default value #232 (@kzu)
  • +
+ +

v3.0.0-alpha (2023-02-07)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Stale info on unrelated changes #186
  • +
  • Should $(GitDefaultBranch) now default to main rather than master #167
  • +
  • Integrate better with SourceLink and built-in support in the SDK #128
  • +
  • Switch to ThisAssembly.Constants for C# #229 (@kzu)
  • +
  • Properly detect HEAD changes for incremental builds #226 (@kzu)
  • +
  • Change GitDefaultBranch to main instead of master #225 (@kzu)
  • +
  • Improve targets organization by moving ThisAssembly to another targets #219 (@kzu)
  • +
  • Switch to built-in .NET SDK AssemblyMetadata support #218 (@kzu)
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • Missing Git Information with Docker build #216
  • +
  • Version issue with Multi-target projects #202
  • +
  • Git isDirty triggers rebuilds #183
  • +
  • GitInfo.cache collects warnings which leads to build errors #91
  • +
+ +

:hammer: Other:

+ +
    +
  • $(GitBranch) prop value is empty in .csproj file #178
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Delete removed define for assembly metadata #220 (@kzu)
  • +
+ +

v2.3.0 (2022-11-18)

+ +

Full Changelog

+ +

:bug: Fixed bugs:

+ +
    +
  • make the gitinfo caches location configurable to be able to reuse the same information over several projects that are built #190
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Feature/use git info cache for all solution projects #191 (@tisis2)
  • +
+ +

v2.2.1 (2022-11-16)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • maybe: show better error msg if windows visual studio git outputs linux paths #131
  • +
  • Add release notes #89
  • +
  • Can the same be used for managed C++? If not create it? #67
  • +
  • Cake: Use within Cake #48
  • +
  • Doesn’t work with projects on SMB shares #8
  • +
  • Add section on how to set versions from MSBuild #211 (@kzu)
  • +
  • Fix “MSBuild customizations” misnomer & add link to documentation #206 (@JimmyCushnie)
  • +
  • fix bug Branch name is wrong when compiling from a git worktree #197 (@li-zhixin)
  • +
  • Properly escape GitExe and CygPathExe for WSL #195 (@socram8888)
  • +
  • Update “dirty” file only when GitIsDirty changes #184 (@AmoreCadenza)
  • +
  • Fix of buildTransitive feature of package #182 (@PadreSVK)
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • MSBuild variables don’t work for MAUI projects #203
  • +
  • Execution fails if using WSL and username contains spaces #194
  • +
  • delete #193
  • +
  • [Question] Commit Message #185
  • +
  • Build fails if git config log.showSignature true #180
  • +
  • Disable signatures when obtaining commit date - fixes #180 #213 (@socram8888)
  • +
+ +

:hammer: Other:

+ +
    +
  • Deleted #181
  • +
  • Publish new version to nuget.org #159
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • +Mᐁ includes #207 (@devlooped-bot)
  • +
  • +M▼ includes #200 (@github-actions[bot])
  • +
  • Integrate .csproj section on code example on README.md #173 (@paonath)
  • +
+ +

v2.2.0 (2021-08-25)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Add source repository information to package #169
  • +
  • Add support for nuget transitive dependencies (via PackageReference) #154
  • +
  • GitThisAssemblyMetadata documentation is confusing #152
  • +
  • Feature request: let _CommitDateFormat be configurable #144
  • +
  • Build error when the first commit on a new branch is a cherry pick #133
  • +
  • support for git worktree #88
  • +
  • Issue with GitIsDirty and GitCache #60
  • +
+ +

:bug: Fixed bugs:

+ +
    +
  • Handle add non-zero exit codes from Git #147 (@Therzok)
  • +
+ +

:hammer: Other:

+ +
    +
  • Project URL should be devlooped.github.io/GitInfo #149
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • 🖆 Apply devlooped/oss template, nugetize and modernize #168 (@kzu)
  • +
  • Is dirty always check #165 (@freza-tm)
  • +
  • Add support for nuget transitive dependecy for .targets #155 (@PadreSVK)
  • +
  • Updating content readme.txt for issue #152 #153 (@daiplusplus)
  • +
  • Allowed git commit date format to be configured through GitCommitDateFormat property #145 (@tomcurran)
  • +
  • Add –always to default name-rev args, so a commit hash is used instead of ‘undefined’ #132 (@andersforsgren)
  • +
+ +

v2.1.2 (2020-09-24)

+ +

Full Changelog

+ +

:sparkles: Implemented enhancements:

+ +
    +
  • Option to exclude merges when calculating SemVerPatch #124
  • +
  • RepositoryUrl may contain username and password #122
  • +
  • Folder Syntax are not supported #101
  • +
  • Only consider version tags #100
  • +
  • Add “CheckinDate” to the ThisAssembly to be used in AssemblyInfo #65
  • +
  • Error when the path to file GitInfo.txt contains spaces #13
  • +
  • Include boolean indicating whether working tree is dirty #10
  • +
  • GitExe in the PATH should be first #6
  • +
  • Thoughts on including date information #2
  • +
+ +

:hammer: Other:

+ +
    +
  • Possibility to exclude tag refs from $(GitBranch) #126
  • +
  • “Unrecognized escape sequence” when remote url is a Windows path #119
  • +
  • GitSemVerPatch always 0 after update from 2.0.26 to 2.0.29 #116
  • +
  • Add GitSha override when building #114
  • +
  • Use MSBuild property to determine base version instead of external file #113
  • +
  • [Feature] Retrieve repository url #109
  • +
  • ASP.NET Core 3.1 GitThisAssemblyMetadata setting? #108
  • +
  • Change ThisAssembly access to Public #107
  • +
  • Include origin in git info #103
  • +
  • Can’t Get BaseVersion.Patch+1 #99
  • +
  • Build fails if git config log.showSignature true #86
  • +
  • Emit assembly attributes #85
  • +
  • Conflicts when using InternalsVisibleTo #84
  • +
  • Broken link #83
  • +
  • Incremental build is broken #81
  • +
  • dotnet tool #79
  • +
  • Question regarding ThisAssembly.Git.Tag - separate commit using a plus? #78
  • +
  • Is there a way to make GitInfo work with Xamarin Live Player #77
  • +
  • GitInfo.txt per project leaves GitSemVerPatch at zero #76
  • +
  • How to add pre-release information only if building from dev branches or on dev box #70
  • +
  • Default protection level of ThisAssembly #69
  • +
  • Info on target (release/debug/…)? #68
  • +
  • csproj example #62
  • +
  • Cannot use on OSX #61
  • +
  • Preffered Version Scheme #59
  • +
  • naming clash? “ThisAssembly” exists in Microsoft.Build.Utilities.v4.0 #56
  • +
  • Cannot access internal class “ThisAssembly” here #55
  • +
  • Commits not counting correctly when base branch is already ahead #54
  • +
  • Examples to increase the counters. #49
  • +
  • Clean up the output by using EchoOff for Exec #47
  • +
  • If no Git found, build should fail #46
  • +
  • HOWTO dotnet core nuget versioning #45
  • +
  • Using GitInfo in a WPF app causes build failure #44
  • +
  • Assembly Metadata IsDirty must be a string #43
  • +
  • Build fails from dotnet publish #41
  • +
  • Templates should have the <auto-generated /> tag as first line #39
  • +
  • packed-refs need be tracked. #37
  • +
  • ThisAssembly.Git.Commit: Information Mis-match #33
  • +
  • VB.Net: Strict Mode #32
  • +
  • Using GitSemVer in TFS builds/releases. #29
  • +
  • Branch names with slashes are chopped #27
  • +
  • Set default value for GitIsDirty #23
  • +
  • Confused about where values come from #21
  • +
  • override ThisAssemblyNamespace #20
  • +
  • Build error with 1.1.32 #17
  • +
  • Usefulness of Git.SemVer.Patch compared to Git.Commits? #9
  • +
  • Cant get it to work on Universal Windows Platform #7
  • +
  • Tag prefix per project possible ? #5
  • +
  • Still -Pre release on nuget? #1
  • +
+ +

:twisted_rightwards_arrows: Merged:

+ +
    +
  • Allow tag and base version customization, flex matching #129 (@kzu)
  • +
  • Prevent tag refs in $(GitBranch) for detached heads. #127 (@andersforsgren)
  • +
  • Add GitCommitsIgnoreMerges option #125 (@christianerbsmehl)
  • +
  • Remove username and password from repository URL #123 (@sbj42)
  • +
  • Add GitCommitDate (#65) #121 (@nikolamilekic)
  • +
  • Use verbatim string literals in C# and F# templates #120 (@sbj42)
  • +
  • Fix GitSemVerPatch always 0 #117 (@ysc3839)
  • +
  • Make the PATCH / GitBaseVersionPatch optional #115 (@BoBiene)
  • +
  • Fix GitThisAssemblyMetadata #112 (@joacar)
  • +
  • Add repository url #111 (@joacar)
  • +
  • fixed #98 #110 (@pedoc)
  • +
  • Turn off signature display when running log #102 (@kzu)
  • +
  • Fix SemVer.Source not working in Visual Basic #97 (@MobileManiC)
  • +
  • F# support #93 (@ndani14)
  • +
  • Don’t cause MSBuild warnings ‘expected’ failures #90 (@alanmcgovern)
  • +
  • Fix incremental build #82 (@shadow-cs)
  • +
  • Reintroduce NormalizeDirectory usage, fix actual error #75 (@kzu)
  • +
  • Ensure we normalize to the correct path separator #73 (@alanmcgovern)
  • +
  • Allow counting all commits in the repository #66 (@alanmcgovern)
  • +
  • Ensuring the GitExe is set when the initial target is not evaluated #58 (@adalon)
  • +
  • Fix for cygwin/WSL and add support for Windows Store WSL distros #57 (@chkn)
  • +
  • Add support for multi-targeting builds to retrieve Git information #53 (@kzu)
  • +
  • v2 #52 (@kzu)
  • +
  • Switch to 2017 image #51 (@kzu)
  • +
  • Use MSBuildRuntimeTime to discern xbuild #50 (@abock)
  • +
  • Don’t do xbuild things on Windows #42 (@bojanrajkovic)
  • +
  • Add <auto-generated /> comments to templates #40 (@bvli)
  • +
  • track packed-refs as refs/heads may be empty when “packed-refs -all” have been used #38 (@bigbearzhu)
  • +
  • VB.Net: Strict Mode, fixes #32 #36 (@wahmedswl)
  • +
  • fixes #32 #35 (@wahmedswl)
  • +
  • Add support for git in WSL #31 (@chkn)
  • +
  • Update documentation (and whitespace) #26 (@dueringa)
  • +
  • Set default value for GitIsDirty in non-repos #25 (@dueringa)
  • +
  • Set default value for GitIsDirty in non-repos #24 (@dueringa)
  • +
  • Added support for worktrees #22 (@taylorjonl)
  • +
  • Update GitInputs list to include branch heads recursively #19 (@bigbearzhu)
  • +
  • add missing close paren breaking markdown link #11 (@jamesmanning)
  • +
  • Fix cygwin support #4 (@chkn)
  • +
  • Untabification of readme.txt #3 (@atifaziz)
  • +
+ +

* This Changelog was automatically generated by github_changelog_generator

+ +
+
+ + + + + diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..0202d86 --- /dev/null +++ b/changelog.md @@ -0,0 +1,445 @@ +# Changelog + +## [v3.5.0](https://github.com/devlooped/GitInfo/tree/v3.5.0) (2024-11-02) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.5...v3.5.0) + +:sparkles: Implemented enhancements: + +- Question: Why we use git log with format to get the Current commit? [\#355](https://github.com/devlooped/GitInfo/issues/355) +- SetGitExe doesn't recognize VS Git locations [\#324](https://github.com/devlooped/GitInfo/issues/324) +- Projects don't rebuild after committing [\#322](https://github.com/devlooped/GitInfo/issues/322) +- New tag without version drop semver to zeros [\#319](https://github.com/devlooped/GitInfo/issues/319) +- Add vswhere fallback to locate git provided by VS [\#372](https://github.com/devlooped/GitInfo/pull/372) (@kzu) +- Simplify IsDirty with newer typed constants in ThisAssembly [\#368](https://github.com/devlooped/GitInfo/pull/368) (@kzu) +- Allow opting-out of GitBranch default in CI [\#366](https://github.com/devlooped/GitInfo/pull/366) (@kzu) +- Set default GitBranch from CI env variables [\#365](https://github.com/devlooped/GitInfo/pull/365) (@kzu) +- Using simpler git command to get current commit [\#356](https://github.com/devlooped/GitInfo/pull/356) (@kzu) + +:hammer: Other: + +- Using GitInfo with Ncrunch [\#345](https://github.com/devlooped/GitInfo/issues/345) + +:twisted_rightwards_arrows: Merged: + +- Adopt SL v2 via ThisAssembly.Constants and document in readme\(s\) [\#370](https://github.com/devlooped/GitInfo/pull/370) (@kzu) +- +Mᐁ includes [\#367](https://github.com/devlooped/GitInfo/pull/367) (@devlooped-bot) +- +Mᐁ includes [\#357](https://github.com/devlooped/GitInfo/pull/357) (@devlooped-bot) +- Clean code [\#352](https://github.com/devlooped/GitInfo/pull/352) (@gitfool) +- Remove redundant depends on targets [\#346](https://github.com/devlooped/GitInfo/pull/346) (@gitfool) +- Fix fast up-to-date-check [\#343](https://github.com/devlooped/GitInfo/pull/343) (@gitfool) +- Disable rogue command echo [\#342](https://github.com/devlooped/GitInfo/pull/342) (@gitfool) + +## [v3.3.5](https://github.com/devlooped/GitInfo/tree/v3.3.5) (2024-05-13) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.4...v3.3.5) + +:sparkles: Implemented enhancements: + +- Can not find all git info when on branch with '.' in the name [\#328](https://github.com/devlooped/GitInfo/issues/328) + +:bug: Fixed bugs: + +- `ThisAssembly.Git.IsDirty` is included when `GitThisAssembly` is false [\#337](https://github.com/devlooped/GitInfo/issues/337) +- Update to 3.3.4 via Nuget crashes [\#335](https://github.com/devlooped/GitInfo/issues/335) +- Git.Branch always gives \[HEAD\] for detached HEAD commit. [\#333](https://github.com/devlooped/GitInfo/issues/333) +- Do not emit ThisAssembly.Git.IsDirty when GitThisAssembly is false [\#338](https://github.com/devlooped/GitInfo/pull/338) (@kzu) + +## [v3.3.4](https://github.com/devlooped/GitInfo/tree/v3.3.4) (2024-02-15) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.3...v3.3.4) + +:bug: Fixed bugs: + +- GetInfo 3.3.3 fails like \#273 \('ThisAssembly.Git' is inaccessible...\) on non-SDK style .csproj, 2.3.0 works fine [\#326](https://github.com/devlooped/GitInfo/issues/326) +- Weird race condition with targets [\#321](https://github.com/devlooped/GitInfo/issues/321) + +:twisted_rightwards_arrows: Merged: + +- Fix race conditions [\#330](https://github.com/devlooped/GitInfo/pull/330) (@gitfool) + +## [v3.3.3](https://github.com/devlooped/GitInfo/tree/v3.3.3) (2023-08-30) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.2...v3.3.3) + +:bug: Fixed bugs: + +- parse\(''\)" cannot be evaluated. version string portion was too short or too long [\#300](https://github.com/devlooped/GitInfo/issues/300) +- Shield from invalid git version [\#313](https://github.com/devlooped/GitInfo/pull/313) (@kzu) + +:twisted_rightwards_arrows: Merged: + +- +Mᐁ includes [\#315](https://github.com/devlooped/GitInfo/pull/315) (@devlooped-bot) + +## [v3.3.2](https://github.com/devlooped/GitInfo/tree/v3.3.2) (2023-08-30) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.1...v3.3.2) + +:bug: Fixed bugs: + +- LangVersion latest and using 11.0 constants [\#311](https://github.com/devlooped/GitInfo/issues/311) +- Privacy about SponsorLink with GitInfo [\#299](https://github.com/devlooped/GitInfo/issues/299) +- Linux compatibility issues? [\#298](https://github.com/devlooped/GitInfo/issues/298) +- Bump ThisAssembly to get fix for C\#11 raw strings [\#312](https://github.com/devlooped/GitInfo/pull/312) (@kzu) + +## [v3.3.1](https://github.com/devlooped/GitInfo/tree/v3.3.1) (2023-08-11) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.3.0...v3.3.1) + +:twisted_rightwards_arrows: Merged: + +- Bump to downstream ThisAssembly without SponsorLink [\#305](https://github.com/devlooped/GitInfo/pull/305) (@kzu) +- +Mᐁ includes [\#303](https://github.com/devlooped/GitInfo/pull/303) (@devlooped-bot) + +## [v3.3.0](https://github.com/devlooped/GitInfo/tree/v3.3.0) (2023-08-11) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.2.0...v3.3.0) + +:twisted_rightwards_arrows: Merged: + +- Remove current implementation of SponsorLink for now [\#302](https://github.com/devlooped/GitInfo/pull/302) (@kzu) + +## [v3.2.0](https://github.com/devlooped/GitInfo/tree/v3.2.0) (2023-08-11) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.1.2...v3.2.0) + +## [v3.1.2](https://github.com/devlooped/GitInfo/tree/v3.1.2) (2023-08-02) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.1.1...v3.1.2) + +:twisted_rightwards_arrows: Merged: + +- replace all invalid chars in semver string with "-" [\#295](https://github.com/devlooped/GitInfo/pull/295) (@smorokin) + +## [v3.1.1](https://github.com/devlooped/GitInfo/tree/v3.1.1) (2023-07-07) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.1.0...v3.1.1) + +:bug: Fixed bugs: + +- IsDirty is no more constant [\#287](https://github.com/devlooped/GitInfo/issues/287) +- IsDirty always false [\#285](https://github.com/devlooped/GitInfo/issues/285) + +## [v3.1.0](https://github.com/devlooped/GitInfo/tree/v3.1.0) (2023-06-05) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.7...v3.1.0) + +:bug: Fixed bugs: + +- Ensure IsDirty is a constant [\#288](https://github.com/devlooped/GitInfo/pull/288) (@kzu) + +## [v3.0.7](https://github.com/devlooped/GitInfo/tree/v3.0.7) (2023-06-05) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.6...v3.0.7) + +:sparkles: Implemented enhancements: + +- Branch name is wrong when compiling from a git worktree [\#189](https://github.com/devlooped/GitInfo/issues/189) + +:bug: Fixed bugs: + +- Version 3.0.5: Error 'ThisAssembly.Git' is inaccessible due to its protection level [\#273](https://github.com/devlooped/GitInfo/issues/273) + +## [v3.0.6](https://github.com/devlooped/GitInfo/tree/v3.0.6) (2023-05-05) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.5...v3.0.6) + +:sparkles: Implemented enhancements: + +- Allow forcing templated code gen for C\# [\#269](https://github.com/devlooped/GitInfo/pull/269) (@kzu) + +:bug: Fixed bugs: + +- The name 'IsDirtyString' does not exist in the current context [\#281](https://github.com/devlooped/GitInfo/issues/281) +- Update to version 3.x breaks Avalonia projects [\#260](https://github.com/devlooped/GitInfo/issues/260) +- CSC : error SL01: SponsorLink has been incorrectly configured [\#251](https://github.com/devlooped/GitInfo/issues/251) +- Fix missing code from missing dependency [\#282](https://github.com/devlooped/GitInfo/pull/282) (@kzu) + +:twisted_rightwards_arrows: Merged: + +- Additional bump to get complete fix [\#283](https://github.com/devlooped/GitInfo/pull/283) (@kzu) + +## [v3.0.5](https://github.com/devlooped/GitInfo/tree/v3.0.5) (2023-03-22) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.4...v3.0.5) + +:bug: Fixed bugs: + +- ThisAssemblyNamespace is ignored when updating from 2.3.0 to 3.0.4 [\#258](https://github.com/devlooped/GitInfo/issues/258) +- Bump to ThisAssembly version that doesn't run so early [\#268](https://github.com/devlooped/GitInfo/pull/268) (@kzu) +- Fix IsDirty generator when using a custom namespace [\#267](https://github.com/devlooped/GitInfo/pull/267) (@kzu) +- Fix backs-compat generation when custom namespace in use [\#266](https://github.com/devlooped/GitInfo/pull/266) (@kzu) + +:twisted_rightwards_arrows: Merged: + +- fix typo 'alwas' with 'always' [\#257](https://github.com/devlooped/GitInfo/pull/257) (@codingdave) +- Set AzureDevOps branch name also for PR [\#256](https://github.com/devlooped/GitInfo/pull/256) (@trejjam) + +## [v3.0.4](https://github.com/devlooped/GitInfo/tree/v3.0.4) (2023-02-22) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.2...v3.0.4) + +:bug: Fixed bugs: + +- Branch Names with '/' generate invalid versions [\#244](https://github.com/devlooped/GitInfo/issues/244) +- V3 IsDirty is a string [\#243](https://github.com/devlooped/GitInfo/issues/243) +- Migration from v2 -\> v3 [\#240](https://github.com/devlooped/GitInfo/issues/240) +- Reintroduce IsDirty boolean property from 2.3 [\#249](https://github.com/devlooped/GitInfo/pull/249) (@kzu) +- Replace / and \ in branches with dashes when setting default Version [\#248](https://github.com/devlooped/GitInfo/pull/248) (@kzu) + +## [v3.0.2](https://github.com/devlooped/GitInfo/tree/v3.0.2) (2023-02-18) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.1...v3.0.2) + +:sparkles: Implemented enhancements: + +- 💜 Bump SponsorLink for better privacy [\#242](https://github.com/devlooped/GitInfo/pull/242) (@kzu) + +## [v3.0.1](https://github.com/devlooped/GitInfo/tree/v3.0.1) (2023-02-17) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.0...v3.0.1) + +:sparkles: Implemented enhancements: + +- Make sure we don't surface SponsorLink as an API [\#241](https://github.com/devlooped/GitInfo/pull/241) (@kzu) + +## [v3.0.0](https://github.com/devlooped/GitInfo/tree/v3.0.0) (2023-02-16) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.0-rc...v3.0.0) + +:twisted_rightwards_arrows: Merged: + +- Rename Analyzer \> GitInfo.CodeAnalysis [\#233](https://github.com/devlooped/GitInfo/pull/233) (@kzu) + +## [v3.0.0-rc](https://github.com/devlooped/GitInfo/tree/v3.0.0-rc) (2023-02-09) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v3.0.0-alpha...v3.0.0-rc) + +:sparkles: Implemented enhancements: + +- Set Version and PackageVersion to a default value [\#232](https://github.com/devlooped/GitInfo/pull/232) (@kzu) + +## [v3.0.0-alpha](https://github.com/devlooped/GitInfo/tree/v3.0.0-alpha) (2023-02-07) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v2.3.0...v3.0.0-alpha) + +:sparkles: Implemented enhancements: + +- Stale info on unrelated changes [\#186](https://github.com/devlooped/GitInfo/issues/186) +- Should `$(GitDefaultBranch)` now default to `main` rather than `master` [\#167](https://github.com/devlooped/GitInfo/issues/167) +- Integrate better with SourceLink and built-in support in the SDK [\#128](https://github.com/devlooped/GitInfo/issues/128) +- Switch to ThisAssembly.Constants for C\# [\#229](https://github.com/devlooped/GitInfo/pull/229) (@kzu) +- Properly detect HEAD changes for incremental builds [\#226](https://github.com/devlooped/GitInfo/pull/226) (@kzu) +- Change GitDefaultBranch to `main` instead of `master` [\#225](https://github.com/devlooped/GitInfo/pull/225) (@kzu) +- Improve targets organization by moving ThisAssembly to another targets [\#219](https://github.com/devlooped/GitInfo/pull/219) (@kzu) +- Switch to built-in .NET SDK AssemblyMetadata support [\#218](https://github.com/devlooped/GitInfo/pull/218) (@kzu) + +:bug: Fixed bugs: + +- Missing Git Information with Docker build [\#216](https://github.com/devlooped/GitInfo/issues/216) +- Version issue with Multi-target projects [\#202](https://github.com/devlooped/GitInfo/issues/202) +- Git isDirty triggers rebuilds [\#183](https://github.com/devlooped/GitInfo/issues/183) +- GitInfo.cache collects warnings which leads to build errors [\#91](https://github.com/devlooped/GitInfo/issues/91) + +:hammer: Other: + +- $\(GitBranch\) prop value is empty in .csproj file [\#178](https://github.com/devlooped/GitInfo/issues/178) + +:twisted_rightwards_arrows: Merged: + +- Delete removed define for assembly metadata [\#220](https://github.com/devlooped/GitInfo/pull/220) (@kzu) + +## [v2.3.0](https://github.com/devlooped/GitInfo/tree/v2.3.0) (2022-11-18) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v2.2.1...v2.3.0) + +:bug: Fixed bugs: + +- make the gitinfo caches location configurable to be able to reuse the same information over several projects that are built [\#190](https://github.com/devlooped/GitInfo/issues/190) + +:twisted_rightwards_arrows: Merged: + +- Feature/use git info cache for all solution projects [\#191](https://github.com/devlooped/GitInfo/pull/191) (@tisis2) + +## [v2.2.1](https://github.com/devlooped/GitInfo/tree/v2.2.1) (2022-11-16) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v2.2.0...v2.2.1) + +:sparkles: Implemented enhancements: + +- maybe: show better error msg if windows visual studio git outputs linux paths [\#131](https://github.com/devlooped/GitInfo/issues/131) +- Add release notes [\#89](https://github.com/devlooped/GitInfo/issues/89) +- Can the same be used for managed C++? If not create it? [\#67](https://github.com/devlooped/GitInfo/issues/67) +- Cake: Use within Cake [\#48](https://github.com/devlooped/GitInfo/issues/48) +- Doesn't work with projects on SMB shares [\#8](https://github.com/devlooped/GitInfo/issues/8) +- Add section on how to set versions from MSBuild [\#211](https://github.com/devlooped/GitInfo/pull/211) (@kzu) +- Fix "MSBuild customizations" misnomer & add link to documentation [\#206](https://github.com/devlooped/GitInfo/pull/206) (@JimmyCushnie) +- fix bug Branch name is wrong when compiling from a git worktree [\#197](https://github.com/devlooped/GitInfo/pull/197) (@li-zhixin) +- Properly escape GitExe and CygPathExe for WSL [\#195](https://github.com/devlooped/GitInfo/pull/195) (@socram8888) +- Update "dirty" file only when `GitIsDirty` changes [\#184](https://github.com/devlooped/GitInfo/pull/184) (@AmoreCadenza) +- Fix of buildTransitive feature of package [\#182](https://github.com/devlooped/GitInfo/pull/182) (@PadreSVK) + +:bug: Fixed bugs: + +- MSBuild variables don't work for MAUI projects [\#203](https://github.com/devlooped/GitInfo/issues/203) +- Execution fails if using WSL and username contains spaces [\#194](https://github.com/devlooped/GitInfo/issues/194) +- delete [\#193](https://github.com/devlooped/GitInfo/issues/193) +- \[Question\] Commit Message [\#185](https://github.com/devlooped/GitInfo/issues/185) +- Build fails if `git config log.showSignature true` [\#180](https://github.com/devlooped/GitInfo/issues/180) +- Disable signatures when obtaining commit date - fixes \#180 [\#213](https://github.com/devlooped/GitInfo/pull/213) (@socram8888) + +:hammer: Other: + +- Deleted [\#181](https://github.com/devlooped/GitInfo/issues/181) +- Publish new version to nuget.org [\#159](https://github.com/devlooped/GitInfo/issues/159) + +:twisted_rightwards_arrows: Merged: + +- +Mᐁ includes [\#207](https://github.com/devlooped/GitInfo/pull/207) (@devlooped-bot) +- +M▼ includes [\#200](https://github.com/devlooped/GitInfo/pull/200) (@github-actions[bot]) +- Integrate .csproj section on code example on README.md [\#173](https://github.com/devlooped/GitInfo/pull/173) (@paonath) + +## [v2.2.0](https://github.com/devlooped/GitInfo/tree/v2.2.0) (2021-08-25) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/v2.1.2...v2.2.0) + +:sparkles: Implemented enhancements: + +- Add source repository information to package [\#169](https://github.com/devlooped/GitInfo/issues/169) +- Add support for nuget transitive dependencies \(via PackageReference\) [\#154](https://github.com/devlooped/GitInfo/issues/154) +- GitThisAssemblyMetadata documentation is confusing [\#152](https://github.com/devlooped/GitInfo/issues/152) +- Feature request: let \_CommitDateFormat be configurable [\#144](https://github.com/devlooped/GitInfo/issues/144) +- Build error when the first commit on a new branch is a cherry pick [\#133](https://github.com/devlooped/GitInfo/issues/133) +- support for git worktree [\#88](https://github.com/devlooped/GitInfo/issues/88) +- Issue with GitIsDirty and GitCache [\#60](https://github.com/devlooped/GitInfo/issues/60) + +:bug: Fixed bugs: + +- Handle add non-zero exit codes from Git [\#147](https://github.com/devlooped/GitInfo/pull/147) (@Therzok) + +:hammer: Other: + +- Project URL should be devlooped.github.io/GitInfo [\#149](https://github.com/devlooped/GitInfo/issues/149) + +:twisted_rightwards_arrows: Merged: + +- 🖆 Apply devlooped/oss template, nugetize and modernize [\#168](https://github.com/devlooped/GitInfo/pull/168) (@kzu) +- Is dirty always check [\#165](https://github.com/devlooped/GitInfo/pull/165) (@freza-tm) +- Add support for nuget transitive dependecy for .targets [\#155](https://github.com/devlooped/GitInfo/pull/155) (@PadreSVK) +- Updating content readme.txt for issue \#152 [\#153](https://github.com/devlooped/GitInfo/pull/153) (@daiplusplus) +- Allowed git commit date format to be configured through GitCommitDateFormat property [\#145](https://github.com/devlooped/GitInfo/pull/145) (@tomcurran) +- Add --always to default name-rev args, so a commit hash is used instead of 'undefined' [\#132](https://github.com/devlooped/GitInfo/pull/132) (@andersforsgren) + +## [v2.1.2](https://github.com/devlooped/GitInfo/tree/v2.1.2) (2020-09-24) + +[Full Changelog](https://github.com/devlooped/GitInfo/compare/89d9e9d5e61e983f507cd1fd2133ee23dd3b6af2...v2.1.2) + +:sparkles: Implemented enhancements: + +- Option to exclude merges when calculating SemVerPatch [\#124](https://github.com/devlooped/GitInfo/issues/124) +- RepositoryUrl may contain username and password [\#122](https://github.com/devlooped/GitInfo/issues/122) +- Folder Syntax are not supported [\#101](https://github.com/devlooped/GitInfo/issues/101) +- Only consider version tags [\#100](https://github.com/devlooped/GitInfo/issues/100) +- Add "CheckinDate" to the ThisAssembly to be used in AssemblyInfo [\#65](https://github.com/devlooped/GitInfo/issues/65) +- Error when the path to file GitInfo.txt contains spaces [\#13](https://github.com/devlooped/GitInfo/issues/13) +- Include boolean indicating whether working tree is dirty [\#10](https://github.com/devlooped/GitInfo/issues/10) +- GitExe in the PATH should be first [\#6](https://github.com/devlooped/GitInfo/issues/6) +- Thoughts on including date information [\#2](https://github.com/devlooped/GitInfo/issues/2) + +:hammer: Other: + +- Possibility to exclude tag refs from $\(GitBranch\) [\#126](https://github.com/devlooped/GitInfo/issues/126) +- "Unrecognized escape sequence" when remote url is a Windows path [\#119](https://github.com/devlooped/GitInfo/issues/119) +- GitSemVerPatch always 0 after update from 2.0.26 to 2.0.29 [\#116](https://github.com/devlooped/GitInfo/issues/116) +- Add GitSha override when building [\#114](https://github.com/devlooped/GitInfo/issues/114) +- Use MSBuild property to determine base version instead of external file [\#113](https://github.com/devlooped/GitInfo/issues/113) +- \[Feature\] Retrieve repository url [\#109](https://github.com/devlooped/GitInfo/issues/109) +- ASP.NET Core 3.1 GitThisAssemblyMetadata setting? [\#108](https://github.com/devlooped/GitInfo/issues/108) +- Change ThisAssembly access to Public [\#107](https://github.com/devlooped/GitInfo/issues/107) +- Include origin in git info [\#103](https://github.com/devlooped/GitInfo/issues/103) +- Can't Get BaseVersion.Patch+1 [\#99](https://github.com/devlooped/GitInfo/issues/99) +- Build fails if `git config log.showSignature true` [\#86](https://github.com/devlooped/GitInfo/issues/86) +- Emit assembly attributes [\#85](https://github.com/devlooped/GitInfo/issues/85) +- Conflicts when using InternalsVisibleTo [\#84](https://github.com/devlooped/GitInfo/issues/84) +- Broken link [\#83](https://github.com/devlooped/GitInfo/issues/83) +- Incremental build is broken [\#81](https://github.com/devlooped/GitInfo/issues/81) +- dotnet tool [\#79](https://github.com/devlooped/GitInfo/issues/79) +- Question regarding ThisAssembly.Git.Tag - separate commit using a plus? [\#78](https://github.com/devlooped/GitInfo/issues/78) +- Is there a way to make GitInfo work with Xamarin Live Player [\#77](https://github.com/devlooped/GitInfo/issues/77) +- GitInfo.txt per project leaves GitSemVerPatch at zero [\#76](https://github.com/devlooped/GitInfo/issues/76) +- How to add pre-release information only if building from dev branches or on dev box [\#70](https://github.com/devlooped/GitInfo/issues/70) +- Default protection level of ThisAssembly [\#69](https://github.com/devlooped/GitInfo/issues/69) +- Info on target \(release/debug/...\)? [\#68](https://github.com/devlooped/GitInfo/issues/68) +- csproj example [\#62](https://github.com/devlooped/GitInfo/issues/62) +- Cannot use on OSX [\#61](https://github.com/devlooped/GitInfo/issues/61) +- Preffered Version Scheme [\#59](https://github.com/devlooped/GitInfo/issues/59) +- naming clash? "ThisAssembly" exists in Microsoft.Build.Utilities.v4.0 [\#56](https://github.com/devlooped/GitInfo/issues/56) +- Cannot access internal class "ThisAssembly" here [\#55](https://github.com/devlooped/GitInfo/issues/55) +- Commits not counting correctly when base branch is already ahead [\#54](https://github.com/devlooped/GitInfo/issues/54) +- Examples to increase the counters. [\#49](https://github.com/devlooped/GitInfo/issues/49) +- Clean up the output by using EchoOff for Exec [\#47](https://github.com/devlooped/GitInfo/issues/47) +- If no Git found, build should fail [\#46](https://github.com/devlooped/GitInfo/issues/46) +- HOWTO dotnet core nuget versioning [\#45](https://github.com/devlooped/GitInfo/issues/45) +- Using GitInfo in a WPF app causes build failure [\#44](https://github.com/devlooped/GitInfo/issues/44) +- Assembly Metadata IsDirty must be a string [\#43](https://github.com/devlooped/GitInfo/issues/43) +- Build fails from dotnet publish [\#41](https://github.com/devlooped/GitInfo/issues/41) +- Templates should have the \ tag as first line [\#39](https://github.com/devlooped/GitInfo/issues/39) +- packed-refs need be tracked. [\#37](https://github.com/devlooped/GitInfo/issues/37) +- ThisAssembly.Git.Commit: Information Mis-match [\#33](https://github.com/devlooped/GitInfo/issues/33) +- VB.Net: Strict Mode [\#32](https://github.com/devlooped/GitInfo/issues/32) +- Using GitSemVer in TFS builds/releases. [\#29](https://github.com/devlooped/GitInfo/issues/29) +- Branch names with slashes are chopped [\#27](https://github.com/devlooped/GitInfo/issues/27) +- Set default value for GitIsDirty [\#23](https://github.com/devlooped/GitInfo/issues/23) +- Confused about where values come from [\#21](https://github.com/devlooped/GitInfo/issues/21) +- override ThisAssemblyNamespace [\#20](https://github.com/devlooped/GitInfo/issues/20) +- Build error with 1.1.32 [\#17](https://github.com/devlooped/GitInfo/issues/17) +- Usefulness of Git.SemVer.Patch compared to Git.Commits? [\#9](https://github.com/devlooped/GitInfo/issues/9) +- Cant get it to work on Universal Windows Platform [\#7](https://github.com/devlooped/GitInfo/issues/7) +- Tag prefix per project possible ? [\#5](https://github.com/devlooped/GitInfo/issues/5) +- Still -Pre release on nuget? [\#1](https://github.com/devlooped/GitInfo/issues/1) + +:twisted_rightwards_arrows: Merged: + +- Allow tag and base version customization, flex matching [\#129](https://github.com/devlooped/GitInfo/pull/129) (@kzu) +- Prevent tag refs in $\(GitBranch\) for detached heads. [\#127](https://github.com/devlooped/GitInfo/pull/127) (@andersforsgren) +- Add GitCommitsIgnoreMerges option [\#125](https://github.com/devlooped/GitInfo/pull/125) (@christianerbsmehl) +- Remove username and password from repository URL [\#123](https://github.com/devlooped/GitInfo/pull/123) (@sbj42) +- Add GitCommitDate \(\#65\) [\#121](https://github.com/devlooped/GitInfo/pull/121) (@nikolamilekic) +- Use verbatim string literals in C\# and F\# templates [\#120](https://github.com/devlooped/GitInfo/pull/120) (@sbj42) +- Fix GitSemVerPatch always 0 [\#117](https://github.com/devlooped/GitInfo/pull/117) (@ysc3839) +- Make the PATCH / GitBaseVersionPatch optional [\#115](https://github.com/devlooped/GitInfo/pull/115) (@BoBiene) +- Fix GitThisAssemblyMetadata [\#112](https://github.com/devlooped/GitInfo/pull/112) (@joacar) +- Add repository url [\#111](https://github.com/devlooped/GitInfo/pull/111) (@joacar) +- fixed \#98 [\#110](https://github.com/devlooped/GitInfo/pull/110) (@pedoc) +- Turn off signature display when running log [\#102](https://github.com/devlooped/GitInfo/pull/102) (@kzu) +- Fix SemVer.Source not working in Visual Basic [\#97](https://github.com/devlooped/GitInfo/pull/97) (@MobileManiC) +- F\# support [\#93](https://github.com/devlooped/GitInfo/pull/93) (@ndani14) +- Don't cause MSBuild warnings 'expected' failures [\#90](https://github.com/devlooped/GitInfo/pull/90) (@alanmcgovern) +- Fix incremental build [\#82](https://github.com/devlooped/GitInfo/pull/82) (@shadow-cs) +- Reintroduce NormalizeDirectory usage, fix actual error [\#75](https://github.com/devlooped/GitInfo/pull/75) (@kzu) +- Ensure we normalize to the correct path separator [\#73](https://github.com/devlooped/GitInfo/pull/73) (@alanmcgovern) +- Allow counting all commits in the repository [\#66](https://github.com/devlooped/GitInfo/pull/66) (@alanmcgovern) +- Ensuring the GitExe is set when the initial target is not evaluated [\#58](https://github.com/devlooped/GitInfo/pull/58) (@adalon) +- Fix for cygwin/WSL and add support for Windows Store WSL distros [\#57](https://github.com/devlooped/GitInfo/pull/57) (@chkn) +- Add support for multi-targeting builds to retrieve Git information [\#53](https://github.com/devlooped/GitInfo/pull/53) (@kzu) +- v2 [\#52](https://github.com/devlooped/GitInfo/pull/52) (@kzu) +- Switch to 2017 image [\#51](https://github.com/devlooped/GitInfo/pull/51) (@kzu) +- Use MSBuildRuntimeTime to discern xbuild [\#50](https://github.com/devlooped/GitInfo/pull/50) (@abock) +- Don't do xbuild things on Windows [\#42](https://github.com/devlooped/GitInfo/pull/42) (@bojanrajkovic) +- Add \ comments to templates [\#40](https://github.com/devlooped/GitInfo/pull/40) (@bvli) +- track packed-refs as refs/heads may be empty when "packed-refs -all" have been used [\#38](https://github.com/devlooped/GitInfo/pull/38) (@bigbearzhu) +- VB.Net: Strict Mode, fixes \#32 [\#36](https://github.com/devlooped/GitInfo/pull/36) (@wahmedswl) +- fixes \#32 [\#35](https://github.com/devlooped/GitInfo/pull/35) (@wahmedswl) +- Add support for git in WSL [\#31](https://github.com/devlooped/GitInfo/pull/31) (@chkn) +- Update documentation \(and whitespace\) [\#26](https://github.com/devlooped/GitInfo/pull/26) (@dueringa) +- Set default value for GitIsDirty in non-repos [\#25](https://github.com/devlooped/GitInfo/pull/25) (@dueringa) +- Set default value for GitIsDirty in non-repos [\#24](https://github.com/devlooped/GitInfo/pull/24) (@dueringa) +- Added support for worktrees [\#22](https://github.com/devlooped/GitInfo/pull/22) (@taylorjonl) +- Update GitInputs list to include branch heads recursively [\#19](https://github.com/devlooped/GitInfo/pull/19) (@bigbearzhu) +- add missing close paren breaking markdown link [\#11](https://github.com/devlooped/GitInfo/pull/11) (@jamesmanning) +- Fix cygwin support [\#4](https://github.com/devlooped/GitInfo/pull/4) (@chkn) +- Untabification of readme.txt [\#3](https://github.com/devlooped/GitInfo/pull/3) (@atifaziz) + + + +\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* diff --git a/index.html b/index.html new file mode 100644 index 0000000..17bfbc6 --- /dev/null +++ b/index.html @@ -0,0 +1,378 @@ + + + + + + + + + + +GitInfo | Git and SemVer Info from MSBuild, C# and VB + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + View on GitHub + + +

GitInfo

+

Git and SemVer Info from MSBuild, C# and VB

+ + +
+
+ + +
+
+

Icon GitInfo

+ +

Git Info from MSBuild, C# and VB

+ +
+

A fresh and transparent approach to Git information retrieval from MSBuild and Code without +using any custom tasks or compiled code and tools, obscure settings, format strings, etc.

+
+ +

Latest version +Downloads +License +Build

+ +

Install via NuGet:

+ +
PM> Install-Package GitInfo
+
+ + +

This project uses SponsorLink to attribute sponsor status (direct, indirect or implicit). +For IDE usage, sponsor status is required. IDE-only warnings will be issued after a grace period otherwise.

+ + + +

Usage

+ +

By default, if the containing project is a C#, F# or VB project, a compile-time generated +source file will contain all the git information and can be accessed from anywhere within +the assembly, as constants in a ThisAssembly (partial) class and its nested Git static class:

+ +
Console.WriteLine(ThisAssembly.Git.Commit);
+
+ +
+

NOTE: you may need to close and reopen the solution in order +for Visual Studio to refresh intellisense and show the +ThisAssembly type the first time after installing the package.

+
+ +

By default, GitInfo will also set $(Version) and $(PackageVersion) which the .NET +SDK uses for deriving the AssemblyInfo, FileVersion and InformationalVersion values, +as well as for packing. This default version is formatted from the following populated +MSBuild properties: $(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit).

+ +

So, straight after install and build/pack, you will get some versioning in place :).

+ +

Alternatively, you can opt-out of this default versioning by setting GitVersion=false +in your project file, if you want to just leverage the Git information and/or version +properties/constants yourself:

+ +
<PropertyGroup>
+  <GitVersion>false</GitVersion>
+</PropertyGroup>
+
+ +

This allows you to use the provided constants to build any versioning attributes you want, +with whatever information you want, without resorting to settings, format strings or anything, +just plain code:

+ +

C#:

+
[assembly: AssemblyVersion(ThisAssembly.Git.BaseVersion.Major + "." + ThisAssembly.Git.BaseVersion.Minor + "." + ThisAssembly.Git.BaseVersion.Patch)]
+
+[assembly: AssemblyFileVersion(ThisAssembly.Git.SemVer.Major + "." + ThisAssembly.Git.SemVer.Minor + "." + ThisAssembly.Git.SemVer.Patch)]
+
+[assembly: AssemblyInformationalVersion(
+    ThisAssembly.Git.SemVer.Major + "." +
+    ThisAssembly.Git.SemVer.Minor + "." +
+    ThisAssembly.Git.Commits + "-" +
+    ThisAssembly.Git.Branch + "+" +
+    ThisAssembly.Git.Commit)]
+
+ +

F#:

+
module AssemblyInfo
+
+open System.Reflection
+
+[<assembly: AssemblyVersion(ThisAssembly.Git.BaseVersion.Major + "." + ThisAssembly.Git.BaseVersion.Minor + "." + ThisAssembly.Git.BaseVersion.Patch)>]
+
+[<assembly: AssemblyFileVersion(ThisAssembly.Git.SemVer.Major + "." + ThisAssembly.Git.SemVer.Minor + "." + ThisAssembly.Git.SemVer.Patch)>]
+
+[<assembly: AssemblyInformationalVersion(
+    ThisAssembly.Git.SemVer.Major + "." +
+    ThisAssembly.Git.SemVer.Minor + "." +
+    ThisAssembly.Git.Commits + "-" +
+    ThisAssembly.Git.Branch + "+" +
+    ThisAssembly.Git.Commit)>]
+
+do ()
+
+ +

VB:

+
<Assembly: AssemblyVersion(ThisAssembly.Git.BaseVersion.Major + "." + ThisAssembly.Git.BaseVersion.Minor + "." + ThisAssembly.Git.BaseVersion.Patch)>
+
+<Assembly: AssemblyFileVersion(ThisAssembly.Git.SemVer.Major + "." + ThisAssembly.Git.SemVer.Minor + "." + ThisAssembly.Git.SemVer.Patch)>
+
+<Assembly: AssemblyInformationalVersion(
+    ThisAssembly.Git.SemVer.Major + "." +
+    ThisAssembly.Git.SemVer.Minor + "." +
+    ThisAssembly.Git.Commits + "-" +
+    ThisAssembly.Git.Branch + "+" +
+    ThisAssembly.Git.Commit)>
+
+ +
+

NOTE: when generating your own assembly version attributes, you will need to turn off +the corresponding assembly version attribute generation from the .NET SDK, by setting +the relevant properties to false: GenerateAssemblyVersionAttribute, +GenerateAssemblyFileVersionAttribute and GenerateAssemblyInformationalVersionAttribute.

+
+ +

You can also just build your own versioning logic in a target that depends on GitInfo using plain MSBuild:

+ +
<PropertyGroup>
+  <GitVersion>false</GitVersion> <!-- we'll do our own versioning -->
+</PropertyGroup>
+
+<ItemGroup>
+  <PackageReference Include="GitInfo" PrivateAssets="all" />
+</ItemGroup>
+
+<Target Name="PopulateInfo" DependsOnTargets="GitVersion" BeforeTargets="GetAssemblyVersion;GenerateNuspec;GetPackageContents">
+  <PropertyGroup>
+    <Version>$(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit)</Version>
+    <PackageVersion>$(Version)</PackageVersion>
+    <RepositoryBranch>$(GitBranch)</RepositoryBranch>
+    <RepositoryCommit>$(GitCommit)</RepositoryCommit>
+    <SourceRevisionId>$(GitBranch) $(GitCommit)</SourceRevisionId>
+  </PropertyGroup>
+</Target>
+
+ +
+

NOTE: because the provided properties are populated via targets that need to run +before they are available, you cannot use the GitInfo-provided properties in a +PropertyGroup at the project level. You can only use them from within a target that +in turn depends on the relevant target from GitInfo (typically, GitVersion as +shown above, if you consume the SemVer properties).

+
+ +

Because this information is readily available whenever you build the project, you +never depend on CI build scripts that generate versions for you, and you can +always compile locally exactly the same version of an assembly that was built by +a CI server.

+ +

You can read more about this project at the +GitInfo announcement blog post.

+ +

Details

+ +

Exposes the following information for use directly from any MSBuild +target that depends on the GitInfo target:

+ +
  $(GitRepositoryUrl)
+  $(GitBranch)
+  $(GitCommit)
+  $(GitCommitDate)
+  $(GitCommits)
+  $(GitTag)
+  $(GitBaseTag)
+  $(GitBaseVersionMajor)
+  $(GitBaseVersionMinor)
+  $(GitBaseVersionPatch)
+  $(GitSemVerMajor)
+  $(GitSemVerMinor)
+  $(GitSemVerPatch)
+  $(GitSemVerLabel)
+  $(GitSemVerDashLabel)
+  $(GitSemVerSource)
+  $(GitIsDirty)
+
+ +

For C#, F# and VB, constants are generated too so that the same information can be +accessed from code:

+ +
  ThisAssembly.Git.RepositoryUrl
+  ThisAssembly.Git.Branch
+  ThisAssembly.Git.Commit
+  ThisAssembly.Git.Commits
+  ThisAssembly.Git.Tag
+  ThisAssembly.Git.BaseTag
+  ThisAssembly.Git.BaseVersion.Major
+  ThisAssembly.Git.BaseVersion.Minor
+  ThisAssembly.Git.BaseVersion.Patch
+  ThisAssembly.Git.SemVer.Major
+  ThisAssembly.Git.SemVer.Minor
+  ThisAssembly.Git.SemVer.Patch
+  ThisAssembly.Git.SemVer.Label
+  ThisAssembly.Git.SemVer.DashLabel
+  ThisAssembly.Git.SemVer.Source
+  ThisAssembly.Git.IsDirty
+
+ +

Available MSBuild properties +to customize the behavior:

+ +
  $(GitVersion): set to 'false' to avoid setting Version and PackageVersion to a default version with format:
+                 $(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit)
+
+  $(GitThisAssembly): set to 'false' to prevent assembly metadata and constants generation.
+
+  $(GitThisAssemblyMetadata): set to 'false' to prevent assembly metadata generation only. Defaults to 'false'.
+                              If 'true', it will also provide assembly metadata attributes for each of the populated values.
+
+  $(ThisAssemblyNamespace): allows overriding the namespace for the ThisAssembly class. Defaults to the global namespace.
+
+  $(GitRemote): name of remote to get repository url for. Defaults to 'origin'.
+
+  $(GitBranchCI): determines whether the branch name should be populated from default environment variables used by the CI system. Default to 'true'.
+
+  $(GitDefaultBranch): determines the base branch used to calculate commits on top of current branch. Defaults to 'main'.
+
+  $(GitVersionFile): determines the name of a file in the Git repository root used to provide the base version info. Defaults to 'GitInfo.txt'.
+
+  $(GitCommitsRelativeTo): optionally specifies an alternative directory for counting commits on top of the base version. Defaults to the $(GitVersionFile) directory.
+
+  $(GitCommitsIgnoreMerges): set to 'true' to ignore merge commits when calculating the number of commits. Defaults to 'false'.
+
+  $(GitInfoReportImportance): allows rendering all the retrieved git information with the specified message importance ('high', 'normal' or 'low'). Defaults to 'low'.
+
+  $(GitIgnoreBranchVersion) and $(GitIgnoreTagVersion): determines whether the branch and tags (if any) will be used to find a base version. Defaults to empty value (no ignoring).
+
+  $(GitNameRevOptions): options passed to git name-rev when finding a branch name for a commit (Detached head). The default is '--refs=refs/heads/* --no-undefined --always'
+                        meaning branch names only, falling back to commit hash. For the legacy behavior where $(GitBranch) for detached head can also be a tag name, use '--refs=refs/*'.
+                        Refs can be included and excluded, see git name-rev docs.
+
+  $(GitSkipCache): whether to cache the Git information determined in a previous build in a GitInfo.cache for performance reasons. Defaults to empty value (no ignoring).
+
+  $(GitCachePath): where to cache the determined Git information. Gives the chance to use a shared location for different projects. This can improve the overall build time.
+                   Has to end with a path seperator Defaults to empty value ('$(IntermediateOutputPath)').
+
+  $(GitTagRegex): regular expression used with git describe to filter the tags to consider for base version lookup. Defaults to * (all).
+
+  $(GitBaseVersionRegex): regular expression used to match and validate valid base versions in branch, tag or file sources. By default, matches any string that *ends* in a valid SemVer2 string.
+                          Defaults to 'v?(?<MAJOR>\d+)\.(?<MINOR>\d+)\.(?<PATCH>\d+)(?:\-(?<LABEL>[\dA-Za-z\-\.]+))?$|^(?<LABEL>[\dA-Za-z\-\.]+)\-v?(?<MAJOR>\d+)\.(?<MINOR>\d+)\.(?<PATCH>\d+)$'
+
+  $(GitCommitDateFormat): value passed as the format option when trying to retrieve the git commit date. Defaults to %%cI (windows) or %cI (non windows).
+
+ +

Goals

+ +
    +
  • No compiled code or tools -> 100% transparency
  • +
  • Trivially added/installed via a NuGet package
  • +
  • No format strings or settings to learn
  • +
  • Simple well-structured .targets file +with plain MSBuild and no custom tasks
  • +
  • Optional embedding +of Git info in assembly metadata
  • +
  • Optional use of Git info to build arbitrary assembly/file version information, both +in C# as well +as VB.
  • +
  • Trivially modified/improved generated code by just adjusting a +C# or +F# or +VB template +included in the NuGet package
  • +
  • 100% incremental build-friendly and high-performing (all proper Inputs/Outputs in place, smart caching of Git info, etc.)
  • +
+ + + +

Sponsors

+ + +

Clarius Org +MFB Technologies, Inc. +Torutek +DRIVE.NET, Inc. +Keith Pickford +Thomas Bolon +Kori Francis +Toni Wenzel +Uno Platform +Dan Siegel +Reuben Swartz +Jacob Foshee + +Ix Technologies B.V. +David JENNI +Jonathan +Charley Wu +Jakob Tikjøb Andersen +Tino Hager +Ken Bonny +Simon Cropp +agileworks-eu +sorahex +Zheyu Shen +Vezel +ChilliCream +4OTC +Vincent Limo +Jordan S. Jones +domischell +Joseph Kingry

+ + + +

Sponsor this project

+ +

Learn more about GitHub Sponsors

+ + + +
+
+ + + + + diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..83969dc --- /dev/null +++ b/license.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) Daniel Cazzulino and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c67d196 --- /dev/null +++ b/readme.md @@ -0,0 +1,309 @@ +![Icon](https://raw.githubusercontent.com/devlooped/GitInfo/main/assets/images/git.png) GitInfo +============ + +Git Info from MSBuild, C# and VB + +> A fresh and transparent approach to Git information retrieval from MSBuild and Code without +> using any custom tasks or compiled code and tools, obscure settings, format strings, etc. + +[![Latest version](https://img.shields.io/nuget/v/GitInfo.svg)](https://www.nuget.org/packages/GitInfo) +[![Downloads](https://img.shields.io/nuget/dt/GitInfo.svg)](https://www.nuget.org/packages/GitInfo) +[![License](https://img.shields.io/:license-MIT-blue.svg)](https://opensource.org/licenses/mit-license.php) +[![Build](https://github.com/devlooped/GitInfo/actions/workflows/build.yml/badge.svg)](https://github.com/devlooped/GitInfo/actions/workflows/build.yml) + +Install via [NuGet](https://www.nuget.org/packages/GitInfo): + +```pwsh +PM> Install-Package GitInfo +``` + + +*This project uses [SponsorLink](https://github.com/devlooped#sponsorlink) to attribute sponsor status (direct, indirect or implicit).* +*For IDE usage, sponsor status is required. IDE-only warnings will be issued after a grace period otherwise.* + + + +## Usage + +By default, if the containing project is a C#, F# or VB project, a compile-time generated +source file will contain all the git information and can be accessed from anywhere within +the assembly, as constants in a `ThisAssembly` (partial) class and its nested `Git` static class: + +```csharp +Console.WriteLine(ThisAssembly.Git.Commit); +``` + +> NOTE: you may need to close and reopen the solution in order +> for Visual Studio to refresh intellisense and show the +> ThisAssembly type the first time after installing the package. + +By default, GitInfo will also set `$(Version)` and `$(PackageVersion)` which the .NET +SDK uses for deriving the AssemblyInfo, FileVersion and InformationalVersion values, +as well as for packing. This default version is formatted from the following populated +MSBuild properties: `$(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit)`. + +So, straight after install and build/pack, you will get some versioning in place :). + +Alternatively, you can opt-out of this default versioning by setting `GitVersion=false` +in your project file, if you want to just leverage the Git information and/or version +properties/constants yourself: + +```xml + + false + +``` + +This allows you to use the provided constants to build any versioning attributes you want, +with whatever information you want, without resorting to settings, format strings or anything, +just plain code: + +C#: +```csharp +[assembly: AssemblyVersion(ThisAssembly.Git.BaseVersion.Major + "." + ThisAssembly.Git.BaseVersion.Minor + "." + ThisAssembly.Git.BaseVersion.Patch)] + +[assembly: AssemblyFileVersion(ThisAssembly.Git.SemVer.Major + "." + ThisAssembly.Git.SemVer.Minor + "." + ThisAssembly.Git.SemVer.Patch)] + +[assembly: AssemblyInformationalVersion( + ThisAssembly.Git.SemVer.Major + "." + + ThisAssembly.Git.SemVer.Minor + "." + + ThisAssembly.Git.Commits + "-" + + ThisAssembly.Git.Branch + "+" + + ThisAssembly.Git.Commit)] +``` + +F#: +```fsharp +module AssemblyInfo + +open System.Reflection + +[] + +[] + +[] + +do () +``` + +VB: +```vbnet + + + + + +``` + +> NOTE: when generating your own assembly version attributes, you will need to turn off +> the corresponding assembly version attribute generation from the .NET SDK, by setting +> the relevant properties to false: `GenerateAssemblyVersionAttribute`, +> `GenerateAssemblyFileVersionAttribute` and `GenerateAssemblyInformationalVersionAttribute`. + +You can also just build your own versioning logic in a target that depends on GitInfo using plain MSBuild: + +```xml + + false + + + + + + + + + $(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit) + $(Version) + $(GitBranch) + $(GitCommit) + $(GitBranch) $(GitCommit) + + +``` + +> NOTE: because the provided properties are populated via targets that need to run +> before they are available, you cannot use the GitInfo-provided properties in a +> PropertyGroup at the project level. You can only use them from within a target that +> in turn depends on the relevant target from GitInfo (typically, `GitVersion` as +> shown above, if you consume the SemVer properties). + +Because this information is readily available whenever you build the project, you +never depend on CI build scripts that generate versions for you, and you can +always compile locally exactly the same version of an assembly that was built by +a CI server. + +You can read more about this project at the +[GitInfo announcement blog post](http://www.cazzulino.com/git-info-from-msbuild-and-code.html). + +## Details + +Exposes the following information for use directly from any MSBuild +target that depends on the GitInfo target: + +``` + $(GitRepositoryUrl) + $(GitBranch) + $(GitCommit) + $(GitCommitDate) + $(GitCommits) + $(GitTag) + $(GitBaseTag) + $(GitBaseVersionMajor) + $(GitBaseVersionMinor) + $(GitBaseVersionPatch) + $(GitSemVerMajor) + $(GitSemVerMinor) + $(GitSemVerPatch) + $(GitSemVerLabel) + $(GitSemVerDashLabel) + $(GitSemVerSource) + $(GitIsDirty) +``` + +For C#, F# and VB, constants are generated too so that the same information can be +accessed from code: + +``` + ThisAssembly.Git.RepositoryUrl + ThisAssembly.Git.Branch + ThisAssembly.Git.Commit + ThisAssembly.Git.Commits + ThisAssembly.Git.Tag + ThisAssembly.Git.BaseTag + ThisAssembly.Git.BaseVersion.Major + ThisAssembly.Git.BaseVersion.Minor + ThisAssembly.Git.BaseVersion.Patch + ThisAssembly.Git.SemVer.Major + ThisAssembly.Git.SemVer.Minor + ThisAssembly.Git.SemVer.Patch + ThisAssembly.Git.SemVer.Label + ThisAssembly.Git.SemVer.DashLabel + ThisAssembly.Git.SemVer.Source + ThisAssembly.Git.IsDirty +``` + +Available [MSBuild properties](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-properties) +to customize the behavior: + +``` + $(GitVersion): set to 'false' to avoid setting Version and PackageVersion to a default version with format: + $(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)+$(GitBranch).$(GitCommit) + + $(GitThisAssembly): set to 'false' to prevent assembly metadata and constants generation. + + $(GitThisAssemblyMetadata): set to 'false' to prevent assembly metadata generation only. Defaults to 'false'. + If 'true', it will also provide assembly metadata attributes for each of the populated values. + + $(ThisAssemblyNamespace): allows overriding the namespace for the ThisAssembly class. Defaults to the global namespace. + + $(GitRemote): name of remote to get repository url for. Defaults to 'origin'. + + $(GitBranchCI): determines whether the branch name should be populated from default environment variables used by the CI system. Default to 'true'. + + $(GitDefaultBranch): determines the base branch used to calculate commits on top of current branch. Defaults to 'main'. + + $(GitVersionFile): determines the name of a file in the Git repository root used to provide the base version info. Defaults to 'GitInfo.txt'. + + $(GitCommitsRelativeTo): optionally specifies an alternative directory for counting commits on top of the base version. Defaults to the $(GitVersionFile) directory. + + $(GitCommitsIgnoreMerges): set to 'true' to ignore merge commits when calculating the number of commits. Defaults to 'false'. + + $(GitInfoReportImportance): allows rendering all the retrieved git information with the specified message importance ('high', 'normal' or 'low'). Defaults to 'low'. + + $(GitIgnoreBranchVersion) and $(GitIgnoreTagVersion): determines whether the branch and tags (if any) will be used to find a base version. Defaults to empty value (no ignoring). + + $(GitNameRevOptions): options passed to git name-rev when finding a branch name for a commit (Detached head). The default is '--refs=refs/heads/* --no-undefined --always' + meaning branch names only, falling back to commit hash. For the legacy behavior where $(GitBranch) for detached head can also be a tag name, use '--refs=refs/*'. + Refs can be included and excluded, see git name-rev docs. + + $(GitSkipCache): whether to cache the Git information determined in a previous build in a GitInfo.cache for performance reasons. Defaults to empty value (no ignoring). + + $(GitCachePath): where to cache the determined Git information. Gives the chance to use a shared location for different projects. This can improve the overall build time. + Has to end with a path seperator Defaults to empty value ('$(IntermediateOutputPath)'). + + $(GitTagRegex): regular expression used with git describe to filter the tags to consider for base version lookup. Defaults to * (all). + + $(GitBaseVersionRegex): regular expression used to match and validate valid base versions in branch, tag or file sources. By default, matches any string that *ends* in a valid SemVer2 string. + Defaults to 'v?(?\d+)\.(?\d+)\.(?\d+)(?:\-(?