[wix-devs] 6210 - Burn engine should handle non-QWORD versions

Rob Mensching rob at firegiant.com
Fri Jul 17 15:56:17 PDT 2020


> I'll probably leave FileVersionFromStringEx alone

Sure.


> I think I'll leave the internal Burn engine version as a QWORD though.

Bummer. If Burn used the new string/version struct that would allow people to use both dotted versions and semver for their new bundles. It'd also guarantee one user of the code. ;)


> a standalone application would want "@#$%^&*" to be "successfully" parsed into a version.

I didn't think "@#$%^&*" would be successfully parsed. The version string would have to be something like "1", "1.2", "1.2.3", "1.2.3.4", "1.2.3-preview.5" etc. I'm probably missing something.


> . Maybe this will help - what would we call this version struct if it was verutil.h? Would it still be BUNDLE_VERSION?

No, not BUNDLE_VERSION. What about "VERSION_PARSED"? Or "VER_VERSION"? Or "VERUTIL_VERSION"? Or "VER_PARSED_VERSION"?


-----Original Message-----
From: wix-devs <wix-devs-bounces at lists.wixtoolset.org> On Behalf Of Sean Hall via wix-devs
Sent: Thursday, July 16, 2020 1:55 AM
To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org>
Cc: Sean Hall <r.sean.hall at gmail.com>
Subject: Re: [wix-devs] 6210 - Burn engine should handle non-QWORD versions

Ok, strings it is. Though I would like to point out that the struct has a copy of the original string (well, with the leading 'v' removed if it was there).

Jacob, I will change the data type for all of the version variables (C++ not Burn) in Burn to LPWSTR. That should include atomutil and apuputil.
I'll probably leave FileVersionFromStringEx alone, unless someone wants that to be changed too. I think I'll leave the internal Burn engine version as a QWORD though.

I don't know where we're storing versions as QWORDs in 3.x? I'm pretty sure all of the registry keys we write are strings. I'll probably add methods in dutil to get a BUNDLE_VERSION from a QWORD version.

I can expose a CompareVersions method from the engine that takes 2 strings.

I can understand why Burn-adjacent applications would want to be able to parse versions exactly like the Burn engine does, but I don't understand why a standalone application would want "@#$%^&*" to be "successfully"
parsed into a version. Maybe this will help - what would we call this version struct if it was verutil.h? Would it still be BUNDLE_VERSION?

On Thu, Jul 16, 2020 at 5:26 AM Hoover, Jacob via wix-devs < wix-devs at lists.wixtoolset.org> wrote:

> If the version is exposed as a string, then I think we need to expose 
> a compare at a minimum.  Ex: I have a baf that scans for other 
> semi-related bundles, and wants to import settings from the latest 
> version of the related bundle.
>
> I also have my update feed parsing that was done in my custom WixStdBA.
> If I am no longer getting a QWORD, then I need to be able to have the 
> engine compare these black magic strings.
>
> I would also assume the atom feed parsing should then also be updated 
> to handle the new string...  Once Sean gets his changes merged in I 
> can do that part, unless he's close enough to it, that he can tweak 
> it.  Next question is, if it was a QWORD in 3.x and a string in 4, we 
> need to account for handling both old and new values.  (My guess is 
> the engine will have to read the old QWORD and format it as a string?)
>
> From: Rob Mensching [mailto:rob at firegiant.com]
> Sent: Wednesday, July 15, 2020 1:35 PM
> To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org>
> Cc: Hoover, Jacob <Jacob.Hoover at greenheck.com>
> Subject: RE: [wix-devs] 6210 - Burn engine should handle non-QWORD 
> versions
>
> No, I was convinced strings are the best thing for Burn to pass around.
> Strings avoid all these struct definition problems *and* provide the 
> BA something it could reasonably display to the user. It's especially 
> useful if we preserve the original string version value from the .wxs code.
>
> > At this point, I'd like to archive the BootstrapperCore repo and 
> > move
> the Burn headers into the Burn repo
>
> This sounds good. As per above, I think we use strings to avoid all 
> the remaining header problems.
>
> > If we're going to be exposing the struct from Burn, then we might as
> well add a ParseBundleVersion method/message and CompareBundleVersions 
> method. Would we add a CompareBundleVersionStrings method?
>
> I'm not 100% up to speed whether a "CompareVersion" method needs to be 
> exposed by Burn but if you find it is needed, I think it should take 
> strings (as per above). I also wouldn't add the word "Bundle" in there 
> because... see next point.
>
> > With regards to putting this in "verutil.h", I've been treating this
> proposal as teaching the Burn engine how to handle the crazy strings 
> that can be thrown at it. I would think a more general purpose library 
> would have its own spec on what a valid version is and reject strings 
> that aren't valid. So I think the data structure and comparison logic 
> make sense outside of Burn, but not the parser.
>
> So far, the list of " crazy strings that can be thrown at [Burn]" 
> match the crazy strings Id' like to be able to handle globally. 
> Additionally, the rules described match the rules I imagined globally. 
> So, if all processing (parsing/comparision/conversion from struct to string) lived in a "verutil"
> I'm pretty confident it would be globally useful (especially based on 
> what I saw in your butil.h PR). I understand if you only started with 
> the verutil functions required by Burn (but I'm guessing Burn will 
> need the same list global support needs based on what I saw in your 
> butil.h PR), but I hope you'd consider putting them in verutil first. 
> I do believe you've got the global solution already (delta bugs or 
> small tweaks when v4 finally interacts with reality).
>
>
> -----Original Message-----
> From: wix-devs <wix-devs-bounces at lists.wixtoolset.org<mailto:
> wix-devs-bounces at lists.wixtoolset.org>> On Behalf Of Hoover, Jacob via 
> wix-devs
> Sent: Wednesday, July 15, 2020 7:47 AM
> To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org 
> <mailto:wix-devs at lists.wixtoolset.org>>
> Cc: Hoover, Jacob <Jacob.Hoover at greenheck.com<mailto:
> Jacob.Hoover at greenheck.com>>
> Subject: Re: [wix-devs] 6210 - Burn engine should handle non-QWORD 
> versions
>
> Pointers to the struct, unless the struct is a copy, is bad.
>
> Are we trying too hard to do crazy things? What if we exposed version 
> data as a void* and cb DWORD, and allowed BA's to define their own 
> VerParse and VerCompare functions?
>
> From: wix-devs [mailto:wix-devs-bounces at lists.wixtoolset.org] On 
> Behalf Of Bob Arnson via wix-devs
> Sent: Tuesday, July 14, 2020 7:52 PM
> To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org 
> <mailto:wix-devs at lists.wixtoolset.org>>
> Cc: Bob Arnson <bob at firegiant.com<mailto:bob at firegiant.com>>
> Subject: Re: [wix-devs] 6210 - Burn engine should handle non-QWORD 
> versions
>
> I'd say there's value in being able to parse versions exactly like 
> Burn without being a BA. Maybe butil instead?
>
> -----Original Message-----
> From: wix-devs <wix-devs-bounces at lists.wixtoolset.org<mailto:
> wix-devs-bounces at lists.wixtoolset.org<mailto:
> wix-devs-bounces at lists.wixtoolset.org%
> 3cmailto:wix-devs-bounces at lists.wixtoolset.org>>> On Behalf Of Sean 
> Hall via wix-devs
> Sent: Tuesday, 14 July, 2020 20:24
> To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org 
> <mailto:wix-devs at lists.wixtoolset.org<mailto:wix-devs at lists.wixtoolset
> .org %3cmailto:wix-devs at lists.wixtoolset.org>>>
> Cc: Sean Hall <r.sean.hall at gmail.com<mailto:r.sean.hall at gmail.com<mailto:
> r.sean.hall at gmail.com%3cmailto:r.sean.hall at gmail.com>>>
> Subject: Re: [wix-devs] 6210 - Burn engine should handle non-QWORD 
> versions
>
> Your comment about any change to the actual version comparisons being 
> a breaking change is making me wonder why we would ever make a 
> breaking change to the underlying BUNDLE_VERSION struct. I can't think 
> of any such changes, so maybe we should just pass around pointers to 
> the struct instead of a string.
>
> In order to do that, we'll need to reference the BUNDLE_VERSION struct 
> in the Burn headers (e.g. BootstrapperApplication.h) which live in the 
> BootstrapperCore repo today. Those Burn headers are separate from the 
> balutil headers (e.g. IBootstrapperApplication.h) in the balutil repo. 
> How do we want to do this? Define them in both dutil and Burn (but 
> conditionally so they don't conflict)? Define them in one and create a 
> dependency to it in the other?
>
> Originally BootstrapperCore had the Burn headers and what was 
> BootstrapperCore.dll in v3. I eventually split up 
> BootstrapperCore.dll, putting most of it in the balutil repo and the 
> host part of it into Bal.wixext. At this point, I'd like to archive 
> the BootstrapperCore repo and move the Burn headers into the Burn 
> repo. This would mean we couldn't define BUNDLE_VERSION solely in the 
> Burn headers without creating a cyclic dependency between Burn and dutil.
>
> If we're going to be exposing the struct from Burn, then we might as 
> well add a ParseBundleVersion method/message and CompareBundleVersions method.
> Would we add a CompareBundleVersionStrings method?
>
> With regards to putting this in "verutil.h", I've been treating this 
> proposal as teaching the Burn engine how to handle the crazy strings 
> that can be thrown at it. I would think a more general purpose library 
> would have its own spec on what a valid version is and reject strings 
> that aren't valid. So I think the data structure and comparison logic 
> make sense outside of Burn, but not the parser.
>
____________________________________________________________________
WiX Toolset Developer Mailing List provided by FireGiant http://www.firegiant.com/



More information about the wix-devs mailing list