Giter VIP home page Giter VIP logo

Comments (8)

jkrech avatar jkrech commented on August 20, 2024

As far as I can see, this seems to be a bug. Hopefully this is not due to the fact that the version 2.0.0-alpha.0.5 uses dots after the dash, which is compliant to the Semantic Version format.

from cpackget.

jeromecoutant avatar jeromecoutant commented on August 20, 2024

Maybe linked to Open-CMSIS-Pack/devtools#329 ?

from cpackget.

chaws avatar chaws commented on August 20, 2024

This does seem like a bug parsing the file name, I'm still investigating

from cpackget.

jkrech avatar jkrech commented on August 20, 2024

I see. I guess we must not read the version backwards from the last "." prior to the file extension (*.pack *.zip).
Instead we rely on the "." as separator between <vendor>.<name>.<version>.[pack|zip]
This means <vendor> and <name> must not contain any "." so version starts after second "." and we strip .[pack|zip] to get to extract that complete semantic version.

from cpackget.

chaws avatar chaws commented on August 20, 2024

OK, I think I have found the reason. Cpackget uses the regex for semantic versioning from packIndexFile spec and I have figured that it is matching more than it should:

From the regex in PackIndexFile spec, this is the pattern snippet for the "quality" part of the version (note that there is 3 capturing groups, but the last matches many due to "*", causing it to generate a variable number of matches):

 -                      alpha                   .0 (.5 is a separate match due to *)
(-(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*)?

Running it against "-alpha.0.5" will generate 4 matches: "-", "alpha", ".0" and ".5" (https://regex101.com/r/BO76pa).

Now take a look at the same regex snippet from Semver.org:

   -                   alpha                     .0 (.5 matches due to *, except that now it belongs to the broader match "alpha.0.5")
(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?

The extra ?: transforms the inner regex into a non-capturing group telling the engine not to include that in the matches, leaving the entire snippet with only a single fixed capturing group. If we run the same regex on "-alpha.0.5", we will get a single match "alpha.0.5" (https://regex101.com/r/f4QiL3/1).

Cpackget uses this regex to both match a given pack version and also to separate it from the pack name. The latter was buggy because of the uncertain number of matches that the regex could generate. After swapping the regex to Semver.org one, the bug was fixed! I'll be sending a PR soon.

@jeromecoutant I don't think this is related to Open-CMSIS-Pack/devtools#329 because from what I read briefly the piece of code in packchk, it does not use regex for parsing semantic version.

from cpackget.

jkrech avatar jkrech commented on August 20, 2024

@chaws thanks a lot for the investigation. Could you please also raise a PR against the PACK.xsd to get the expression there to match the one from semver.org. Please include a link in the comment which reference you have been using.
Thanks a lot.

from cpackget.

chaws avatar chaws commented on August 20, 2024

@jkrech Open-CMSIS-Pack/Open-CMSIS-Pack-Spec#123, I could not find a way to test if things break with the change though.

Oops, scratch that. I saw CI at work :) I'll fix the PR

from cpackget.

chaws avatar chaws commented on August 20, 2024

I have merged the bugfix for this issue. I will rollout a new release of cpackget next week.

from cpackget.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.