[RFC] incremental rebase

Ken Brown kbrown@cornell.edu
Mon Nov 24 20:19:00 GMT 2014


On 11/23/2014 3:17 PM, Achim Gratz wrote:
>
> In my attempt to implement post-postinstall scripts for Ken to use for
> TeXlive it turned out that the same hack I used for the pre-postinstall
> perpetual scripts wouldn't really work.  So I've implemented the
> stratified postinstall already, at the moment limited to three strata:
> 0, default and z; as well as perpetual and runonce scripts (on each
> stratum).  No provisions for query and trigger scripts is made at the
> moment, as these can be implemented with some manual effort with the two
> script types that are already provided.  This is extensible, although at
> the moment I have to configure the available strata twice, so there
> needs to be some more refactoring in that area.
>
> Since I've coded this up on my new Linux box which already uses gcc-4.9
> I had to do some preparatory fixes (the log macro clashing with the log
> function) leading up to the meat of the implementation.  The patch
> implementing the stratified postinstall is here:
>
> http://repo.or.cz/w/cygwin-setup.git/commitdiff/d1df7acc1dce40c97ddfaa2de38542a3a269004e

Thanks for doing this!  A couple of comments:

> bool
>  Script::isAScript (const std::string& file)
>  {
> -    /* file may be /etc/postinstall or etc/postinstall */
> -    if (casecompare(file, ETCPostinstall, sizeof(ETCPostinstall)-1) &&
> -       casecompare(file, ETCPostinstall+1, sizeof(ETCPostinstall)-2))
> -      return false;
> -    if (file.c_str()[file.size() - 1] == '/')
> +    // is a directory path
> +    if (file.size() == file.rfind('/'))
       ^^^^^^^^^^^^^^^
Shouldn't this be file.size() - 1?

> +bool
> +Script::match (const std::string& stratum, const std::string& type)
>  {
> -
> +  if ("done" == scriptExtension)
> +    return false;
> +  bool matchedStratum = false;
> +  if (stratum.size())
> +    {
> +      std::size_t found = stratum.find(scriptStratum);
> +      matchedStratum = ((std::string::npos != found) &&
> +                       (std::string::npos != stratum.substr(found,1).find_first_of(allowedStrata)));

Is this last test necessary?  The Script constructor guarantees that the 
stratum is allowable.

> +    }
> +  else
> +    matchedStratum = true;
> +  bool matchedType = true;
> +  if (type.size())
> +    {
> +      std::size_t found = type.find(scriptType);
> +      matchedType = ((std::string::npos != found) &&
> +                    (std::string::npos != type.substr(found,1).find_first_of(allowedTypes)));

Ditto.

[...]

> The changed incremental autorebase package has been tested both as a new
> install and subsequent perpetual run on both architectures.  The
> pre-compiled binaries identify themselves as version "2.854-spi".

And I'll make some TeX Live postinstall scripts to test it with.

Ken



More information about the Cygwin-apps mailing list