[haiku-commits] BRANCH HaikuPM-github.package-management - in src: kits/package data/package_infos

  • From: HaikuPM-github.package-management <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 18 Apr 2013 18:00:38 +0200 (CEST)

added 3 changesets to branch 'refs/remotes/HaikuPM-github/package-management'
old head: 7fa369956e1b30f61679ae5552b5f018a9e76578
new head: 06b4ebe51c4eb83f00f912cf88fe13a41e5d9a6d
overview: https://github.com/haiku/HaikuPM/compare/7fa3699...06b4ebe

----------------------------------------------------------------------------

b7c89d4: packagefs: Use '~' as pre-release separator
  
  "[...]" turns out to be not so good an idea after all. In the shell it
  would require escaping.

9d81dc7: BPackage{Info,Version}: Switch to '~' as pre-release separator
  
  Also allow '.' in the pre-release string (as in "alpha4.1") and in
  package and resolvable names.

06b4ebe: package-infos in tree: use '~' as pre-release separator

                                    [ Ingo Weinhold <ingo_weinhold@xxxxxx> ]

----------------------------------------------------------------------------

8 files changed, 73 insertions(+), 78 deletions(-)
.../kernel/file_systems/packagefs/Version.cpp    |   2 +-
src/data/package_infos/haiku                     |   4 +-
src/data/package_infos/haiku_devel               |   6 +-
src/data/package_infos/haiku_userguide           |   4 +-
src/data/package_infos/haiku_welcome             |   4 +-
src/data/package_infos/makefile_engine           |   4 +-
src/kits/package/PackageInfo.cpp                 | 125 +++++++++----------
src/kits/package/PackageVersion.cpp              |   2 +-

############################################################################

Commit:      b7c89d42a67fa5b8d9087f0ab2948e286b335cf7
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Thu Apr 18 15:44:28 2013 UTC

packagefs: Use '~' as pre-release separator

"[...]" turns out to be not so good an idea after all. In the shell it
would require escaping.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/file_systems/packagefs/Version.cpp 
b/src/add-ons/kernel/file_systems/packagefs/Version.cpp
index 3ea5660..849453f 100644
--- a/src/add-ons/kernel/file_systems/packagefs/Version.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/Version.cpp
@@ -199,7 +199,7 @@ Version::ToString(char* buffer, size_t bufferSize) const
 
        if (fPreRelease != NULL) {
                size_t offset = std::min(bufferSize, size);
-               size += snprintf(buffer + offset, bufferSize - offset, "[%s]",
+               size += snprintf(buffer + offset, bufferSize - offset, "~%s",
                        fPreRelease);
        }
 

############################################################################

Commit:      9d81dc7655a984ce6dd0d79878215fe4d5748da6
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Thu Apr 18 15:48:25 2013 UTC

BPackage{Info,Version}: Switch to '~' as pre-release separator

Also allow '.' in the pre-release string (as in "alpha4.1") and in
package and resolvable names.

----------------------------------------------------------------------------

diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp
index 57ac1d2..967cfc6 100644
--- a/src/kits/package/PackageInfo.cpp
+++ b/src/kits/package/PackageInfo.cpp
@@ -109,11 +109,17 @@ private:
                        void                            _Parse(BPackageInfo* 
packageInfo);
 
        static  bool                            _IsAlphaNumUnderscore(const 
BString& string,
-                                                                       int32* 
_errorPos = NULL);
+                                                                       const 
char* additionalChars,
+                                                                       int32* 
_errorPos);
        static  bool                            _IsAlphaNumUnderscore(const 
char* string,
-                                                                       int32* 
_errorPos = NULL);
+                                                                       const 
char* additionalChars,
+                                                                       int32* 
_errorPos);
        static  bool                            _IsAlphaNumUnderscore(const 
char* start,
-                                                                       const 
char* end, int32* _errorPos = NULL);
+                                                                       const 
char* end,
+                                                                       const 
char* additionalChars,
+                                                                       int32* 
_errorPos);
+       static  bool                            _IsValidResolvableName(const 
char* string,
+                                                                       int32* 
_errorPos);
 
 private:
                        ParseErrorListener*     fListener;
@@ -344,8 +350,8 @@ BPackageInfo::Parser::_NextToken()
                {
                        const char* start = fPos;
                        while (isalnum(*fPos) || *fPos == '.' || *fPos == '-'
-                               || *fPos == '_' || *fPos == ':' || *fPos == '+' 
|| *fPos == '['
-                               || *fPos == ']') {
+                               || *fPos == '_' || *fPos == ':' || *fPos == '+'
+                               || *fPos == '~') {
                                fPos++;
                        }
                        if (fPos == start)
@@ -442,26 +448,21 @@ BPackageInfo::Parser::_ParseVersionValue(Token& word, 
BPackageVersion* value,
 
        // get the pre-release string
        BString preRelease;
-       if (word.text.Length() > 0 && word.text[word.text.Length() - 1] == ']') 
{
-               int32 openingBracket = word.text.FindLast('[');
-               if (openingBracket < 0) {
-                       throw ParseError("unmatched ']' in version string",
-                               word.pos + word.text.Length() - 1);
-               }
-
-               word.text.CopyInto(preRelease, openingBracket + 1,
-                       word.text.Length() - openingBracket - 2);
-               word.text.Truncate(openingBracket);
+       int32 tildePos = word.text.FindLast('~');
+       if (tildePos >= 0) {
+               word.text.CopyInto(preRelease, tildePos + 1,
+                       word.text.Length() - tildePos - 1);
+               word.text.Truncate(tildePos);
 
                if (preRelease.IsEmpty()) {
                        throw ParseError("invalid empty pre-release string",
-                               word.pos + openingBracket + 1);
+                               word.pos + tildePos + 1);
                }
 
                int32 errorPos;
-               if (!_IsAlphaNumUnderscore(preRelease, &errorPos)) {
+               if (!_IsAlphaNumUnderscore(preRelease, ".", &errorPos)) {
                        throw ParseError("invalid character in pre-release 
string",
-                               word.pos + openingBracket + 1 + errorPos);
+                               word.pos + tildePos + 1 + errorPos);
                }
        }
 
@@ -486,21 +487,21 @@ BPackageInfo::Parser::_ParseVersionValue(Token& word, 
BPackageVersion* value,
                        word.text.CopyInto(micro, secondDotPos + 1, 
word.text.Length());
 
                        int32 errorPos;
-                       if (!_IsAlphaNumUnderscore(micro, &errorPos)) {
+                       if (!_IsAlphaNumUnderscore(micro, "", &errorPos)) {
                                throw ParseError("invalid character in micro 
version string",
                                        word.pos + secondDotPos + 1 + errorPos);
                        }
                }
 
                int32 errorPos;
-               if (!_IsAlphaNumUnderscore(minor, &errorPos)) {
+               if (!_IsAlphaNumUnderscore(minor, "", &errorPos)) {
                        throw ParseError("invalid character in minor version 
string",
                                word.pos + firstDotPos + 1 + errorPos);
                }
        }
 
        int32 errorPos;
-       if (!_IsAlphaNumUnderscore(major, &errorPos)) {
+       if (!_IsAlphaNumUnderscore(major, "", &errorPos)) {
                throw ParseError("invalid character in major version string",
                        word.pos + errorPos);
        }
@@ -660,24 +661,10 @@ BPackageInfo::Parser::_ParseResolvableList(
                                }
                        }
 
-                       if (colonPos >= 0) {
-                               int32 errorPos;
-                               if (!_IsAlphaNumUnderscore(token.text.String(),
-                                               token.text.String() + colonPos, 
&errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + errorPos);
-                               }
-                               if (!_IsAlphaNumUnderscore(token.text.String() 
+ colonPos + 1,
-                                               &errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + colonPos + 1 + 
errorPos);
-                               }
-                       } else {
-                               int32 errorPos;
-                               if (!_IsAlphaNumUnderscore(token.text, 
&errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + errorPos);
-                               }
+                       int32 errorPos;
+                       if (!_IsValidResolvableName(token.text, &errorPos)) {
+                               throw ParseError("invalid character in 
resolvable name",
+                                       token.pos + errorPos);
                        }
 
                        // parse version
@@ -737,25 +724,10 @@ BPackageInfo::Parser::_ParseResolvableExprList(
                                        token.pos);
                        }
 
-                       int32 colonPos = token.text.FindFirst(':');
-                       if (colonPos >= 0) {
-                               int32 errorPos;
-                               if (!_IsAlphaNumUnderscore(token.text.String(),
-                                               token.text.String() + colonPos, 
&errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + errorPos);
-                               }
-                               if (!_IsAlphaNumUnderscore(token.text.String() 
+ colonPos + 1,
-                                               &errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + colonPos + 1 + 
errorPos);
-                               }
-                       } else {
-                               int32 errorPos;
-                               if (!_IsAlphaNumUnderscore(token.text, 
&errorPos)) {
-                                       throw ParseError("invalid character in 
resolvable name",
-                                               token.pos + errorPos);
-                               }
+                       int32 errorPos;
+                       if (!_IsValidResolvableName(token.text, &errorPos)) {
+                               throw ParseError("invalid character in 
resolvable name",
+                                       token.pos + errorPos);
                        }
 
                        BPackageVersion version;
@@ -830,7 +802,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
                                _ParseStringValue(&name, &namePos);
 
                                int32 errorPos;
-                               if (!_IsAlphaNumUnderscore(name, &errorPos)) {
+                               if (!_IsAlphaNumUnderscore(name, ".", 
&errorPos)) {
                                        throw ParseError("invalid character in 
package name",
                                                namePos + errorPos);
                                }
@@ -933,27 +905,28 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
 
 /*static*/ inline bool
 BPackageInfo::Parser::_IsAlphaNumUnderscore(const BString& string,
-       int32* _errorPos)
+       const char* additionalChars, int32* _errorPos)
 {
        return _IsAlphaNumUnderscore(string.String(),
-               string.String() + string.Length(), _errorPos);
+               string.String() + string.Length(), additionalChars, _errorPos);
 }
 
 
 /*static*/ inline bool
 BPackageInfo::Parser::_IsAlphaNumUnderscore(const char* string,
-       int32* _errorPos)
+       const char* additionalChars, int32* _errorPos)
 {
-       return _IsAlphaNumUnderscore(string, string + strlen(string), 
_errorPos);
+       return _IsAlphaNumUnderscore(string, string + strlen(string),
+               additionalChars, _errorPos);
 }
 
 
 /*static*/ bool
 BPackageInfo::Parser::_IsAlphaNumUnderscore(const char* start, const char* end,
-       int32* _errorPos)
+       const char* additionalChars, int32* _errorPos)
 {
        for (const char* c = start; c < end; c++) {
-               if (!isalnum(*c) && *c != '_') {
+               if (!isalnum(*c) && *c != '_' && strchr(additionalChars, *c) == 
NULL) {
                        if (_errorPos != NULL)
                                *_errorPos = c - start;
                        return false;
@@ -964,6 +937,28 @@ BPackageInfo::Parser::_IsAlphaNumUnderscore(const char* 
start, const char* end,
 }
 
 
+/*static*/ bool
+BPackageInfo::Parser::_IsValidResolvableName(const char* string,
+       int32* _errorPos)
+{
+       int32 errorPos;
+       if (const char* colon = strchr(string, ':')) {
+               if (_IsAlphaNumUnderscore(string, colon, ".", &errorPos)) {
+                       if (_IsAlphaNumUnderscore(colon + 1, ".", &errorPos))
+                               return true;
+                       errorPos += colon + 1 - string;
+               }
+       } else {
+               if (_IsAlphaNumUnderscore(string, ".", &errorPos))
+                       return true;
+       }
+
+       if (_errorPos != NULL)
+               *_errorPos = errorPos;
+       return false;
+}
+
+
 const char* BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = {
        "name",
        "summary",
diff --git a/src/kits/package/PackageVersion.cpp 
b/src/kits/package/PackageVersion.cpp
index 0a0a947..157aec8 100644
--- a/src/kits/package/PackageVersion.cpp
+++ b/src/kits/package/PackageVersion.cpp
@@ -136,7 +136,7 @@ BPackageVersion::ToString() const
        }
 
        if (!fPreRelease.IsEmpty())
-               string << '[' << fPreRelease << ']';
+               string << '~' << fPreRelease;
 
        if (fRevision > 0)
                string << '-' << fRevision;

############################################################################

Commit:      06b4ebe51c4eb83f00f912cf88fe13a41e5d9a6d
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Thu Apr 18 15:50:06 2013 UTC

package-infos in tree: use '~' as pre-release separator

----------------------------------------------------------------------------

diff --git a/src/data/package_infos/haiku b/src/data/package_infos/haiku
index d9e60fd..c7fb256 100644
--- a/src/data/package_infos/haiku
+++ b/src/data/package_infos/haiku
@@ -1,5 +1,5 @@
 name                   haiku
-version                        R1[alpha3_pm]-1
+version                        R1~alpha3_pm-1
 architecture   x86_gcc2
 summary                        "The Haiku base system"
 
@@ -16,7 +16,7 @@ licenses {
 }
 
 provides {
-       haiku=R1[alpha3_pm]-1 compat>=R1[alpha1]
+       haiku=R1~alpha3_pm-1 compat>=R1~alpha1
        coreutils=8.4 compat>=0.0
        diffutils=2.8.1 compat>=0.0
        findutils=4.2.33 compat>=0.0
diff --git a/src/data/package_infos/haiku_devel 
b/src/data/package_infos/haiku_devel
index f9a734b..b4ff007 100644
--- a/src/data/package_infos/haiku_devel
+++ b/src/data/package_infos/haiku_devel
@@ -1,5 +1,5 @@
 name                   haiku_devel
-version                        R1[alpha3_pm]-1
+version                        R1~alpha3_pm-1
 architecture   x86_gcc2
 summary                        "The Haiku base system development files"
 
@@ -14,9 +14,9 @@ copyrights            "2001-2011 Haiku, Inc. et al"
 licenses               "MIT"
 
 provides {
-       haiku_devel=R1[alpha3_pm]-1
+       haiku_devel=R1~alpha3_pm-1
 }
 
 requires {
-       haiku == R1[alpha3_pm]-1
+       haiku == R1~alpha3_pm-1
 }
diff --git a/src/data/package_infos/haiku_userguide 
b/src/data/package_infos/haiku_userguide
index 2b0dd50..4d8c231 100644
--- a/src/data/package_infos/haiku_userguide
+++ b/src/data/package_infos/haiku_userguide
@@ -1,5 +1,5 @@
 name                   haiku_userguide
-version                        R1[alpha3_pm]-1
+version                        R1~alpha3_pm-1
 architecture   any
 summary                        "The Haiku user documentation"
 description            "The Haiku user documentation."
@@ -11,7 +11,7 @@ copyrights            "2001-2011 Haiku, Inc. et al"
 licenses               MIT
 
 provides {
-       haiku_userguide=R1[alpha3_pm]-1
+       haiku_userguide=R1~alpha3_pm-1
 }
 
 requires {
diff --git a/src/data/package_infos/haiku_welcome 
b/src/data/package_infos/haiku_welcome
index cdbc2a3..a076a9e 100644
--- a/src/data/package_infos/haiku_welcome
+++ b/src/data/package_infos/haiku_welcome
@@ -1,5 +1,5 @@
 name                   haiku_welcome
-version                        R1[alpha3_pm]-1
+version                        R1~alpha3_pm-1
 architecture   any
 summary                        "The Haiku welcome documentation"
 description            "The Haiku welcome documentation for new users."
@@ -11,7 +11,7 @@ copyrights            "2001-2011 Haiku, Inc. et al"
 licenses               "MIT"
 
 provides {
-       haiku_welcome=R1[alpha3_pm]-1
+       haiku_welcome=R1~alpha3_pm-1
 }
 
 requires {
diff --git a/src/data/package_infos/makefile_engine 
b/src/data/package_infos/makefile_engine
index 5f6238d..39314a0 100644
--- a/src/data/package_infos/makefile_engine
+++ b/src/data/package_infos/makefile_engine
@@ -1,5 +1,5 @@
 name                   makefile_engine
-version                        R1[alpha3_pm]-1
+version                        R1~alpha3_pm-1
 architecture   any
 summary                        "The makefile engine"
 description    "A simple generic makefile engine and makefile template."
@@ -11,7 +11,7 @@ copyrights            "? Be Inc. 2001-2011 Haiku, Inc."
 licenses               MIT
 
 provides {
-       makefile_engine=R1[alpha3_pm]-1
+       makefile_engine=R1~alpha3_pm-1
 }
 
 requires {


Other related posts:

  • » [haiku-commits] BRANCH HaikuPM-github.package-management - in src: kits/package data/package_infos - HaikuPM-github . package-management