On Tue, Sep 07 2021, Xinglu Chen wrote: > On Mon, Sep 06 2021, Sarah Morgensen wrote: > >> Hi, >> >> Xinglu Chen writes: >> >>> Any trick you used to find all of there weird version numbers? :-) >> >> This monstrosity: >> >> rg -U -B4 --pcre2 '(?!\(let.*(\n.*){0,1})\(version "([^\n"]*[^0-9\.][^"\n]*)".*(\n.*){0,10}commit.*version' gnu/packages >> >> and to show just the versions: >> >> rg -Uor '$2' --pcre2 --no-filename --no-line-number > > Wow! I will try that and see for myself! :-) > >>>> IMO, just get rid of the delimiter. If we wanted to be *that* flexible, >>>> we could make it so they provide a tag->version proc instead of (prefix, >>>> suffix, delimiter). >>> >>> a ‘tag->version’ procedure would probably make things a bit too >>> complicated for the people writing package definitions. For example, >>> having a delimiter would make it easy to match a tag like >>> “2021-01-01-release” >>> >>> Delimiter is “.” (sorry if this hurts your eyes ;-)) >>> >>> scheme@(guile-user)> (match:substring (string-match "^[^0-9]*([^\\.[:punct:]]+(\\.[^\\.[:punct:]]+)*).*$" "2021-01-01-release") 1) >>> $28 = "2021" >>> >>> Delimiter is “-” >>> >>> scheme@(guile-user)> (match:substring (string-match "^[^0-9]*([^-[:punct:]]+(-[^-[:punct:]]+)*).*$" "2021-01-01-release") 1) >>> $29 = "2021-01-01-release" >>> >>> And then, setting the suffix to “-release” would match just the version >>> part. >> >> Right. I missed that. >> >> In that vein, should we keep the dashes in "2021-01-01" or convert them >> to periods? > > Having periods would be more consistent, then could have a > ‘date->version’ procedure that replaces the hyphens with dots and have > > (git-reference > (url "https://git.example.org") > (commit (date->version version))) > >> What about when a tag has underscores? > > Hmm, not sure about that, below is a list of packages I could find which had > underscores as delimiters > > gnu/packages/graphics.scm > 239: (commit "DIRECTFB_1_7_7"))) > gnu/packages/gstreamer.scm > 326: (commit "ESOUND_0_2_41"))) > gnu/packages/java.scm > 13925: (commit "jboss-transaction-api_1.2_spec-1.1.1.Final"))) > > They all seem to use periods in the ‘version’ field, though, so I would > say that the underscroes, should also be converted to periods. > >> What if a repo has tags in both formats? Then "3.0.1" would be >> considered older than "2011-01-01". > > That’s tricky, there isn’t really a way to know how old “3.0.1” is, > without looking at the metadata of the tag. Maybe this is one of those > corner cases which can’t really automatically determine the latest > release. Should we have a ‘no-refresh?’ property to tell the refresh to > not try to update the package? > >> Maybe we should just add an extra bit to detect a date format and only >> consider it when there's no "proper versions"? > > That could be a good idea! > >> Aaaand I fell down a rabbit hole after that :) I've attached a patch >> with what I've done. It still has lots of issues--it requires the tag >> to contain at least one version delimiter, it requires the first >> character of the version to be a number... it might not even be better >> than before I touched it, and even so the added complexity might not be >> worth it. But if you'd like to take it for a spin, I've attached it (it >> applies straight on master). > > Great! I will try it out and see how it compares to my current WIP > version. > > Not having characters in the first version number probably isn’t such a > big deal, most version that contain characters end with a character. > E.g., “1.2.3a” is not to uncommon, but “a1.2.3” is rarely seen. I made some changes, to the patch and ran ‘guix refresh -t generic-git | grep "^gnu/packages.*no valid’; I also modified the ‘github’ updater so that it wouldn’t be used. (define %github-updater (upstream-updater (name 'github) (description "Updater for GitHub packages") (pred (const #f)) ;this right here (latest latest-release))) Attached is a file with all the packages that didn’t have any valid tags, and with a short description of perharps why no valid tags were found. Something I noticed was the a lot of Julia package use a version scheme like this: (version "1.2.3+0") The "+0" is included in the version field and acts like a “revision”; I am not familiar with the Julia ecosystem, and I am not sure how we should handle this situation. The updated patch is also attached.