Patch title: Release 89 bulk changes
Abstract:
File: /fullpliant/debian.pli
Key:
    Removed line
    Added line
   
abstract
  [This modules implements direct handling of Debian package
doc
  [You can think about it as a replacement of 'dpkg' and 'ap


function debian_select c -> status
  arg_rw Data:Computer c ; arg ExtendedStatus status
  var Str computer_name := keyof c
  (var DebianDistribution debian) bind c
  each cursor debian:packages
    var Link:DebianPackage p :> cursor map DebianPackage
    if p:priority="required"
      c:env create "package"
      c:env:"package" create p:name
  status := failure
  var Dictionary provide
  each pkg c:env:"package"
    var Link:DebianPackage p :> debian package keyof:pkg pkg
    if err<>""
      return (failure "Could not find Debian package "+keyof
    if pkg:"version"=""
      pkg create "version"
      pkg:"version" := p version
    var Str provides := p provides
    while provides<>""
      if not (provides parse any:(var Str name) "," any:(var
        name := provides ; remain := ""
      provide kmap name Bool := true
      provides := remain
  part complete
    var CBool more := false
    each pkg c:env:"package"
      part check_package
        var Link:DebianPackage p :> debian package keyof:pkg
        for (var Int lap) 0 1
          var Str depends := shunt lap=0 p:predepends p:depe
          while depends<>""
            if not (depends parse any:(var Str defs) "," any
              defs := depends ; remain := ""
            var Str alldefs := defs
            part study_one_condition
              if (defs parse any:(var Str def) "|" any:(var 
                var CBool one := false
                while defs<>""
                  if not (defs parse any:(var Str def) "|" a
                    def := defs ; remain2 := ""
                  if not (def parse any:(var Str name) "(" a
                    name := def ; cond := ""
                  if (satisfyed cond c:env:"package":name:"v
                    one := true
                  defs := remain2
                if not one
                  # debian_trace trace "Condition "+alldefs+
                  alldefs parse  any:(var Str defs) "|" any:
                  restart study_one_condition
              else
                if not (defs parse any:(var Str name) "(" an
                  name := defs ; cond := ""
                if (provide kmap name Bool false)
                  void
                eif not (exists c:env:"package":name)
                  var Link:DebianPackage q :> debian package
                  if err=""
                    debian_trace trace "package " p:name " r
                    c:env create "package"
                    c:env:"package" create q:name
                    c:env:"package":(q name) create "version
                    c:env:"package":(q name):"version" := q 
abstract
  [This modules implements direct handling of Debian package
doc
  [You can think about it as a replacement of 'dpkg' and 'ap


function debian_select c -> status
  arg_rw Data:Computer c ; arg ExtendedStatus status
  var Str computer_name := keyof c
  (var DebianDistribution debian) bind c
  each cursor debian:packages
    var Link:DebianPackage p :> cursor map DebianPackage
    if p:priority="required"
      c:env create "package"
      c:env:"package" create p:name
  status := failure
  var Dictionary provide
  each pkg c:env:"package"
    var Link:DebianPackage p :> debian package keyof:pkg pkg
    if err<>""
      return (failure "Could not find Debian package "+keyof
    if pkg:"version"=""
      pkg create "version"
      pkg:"version" := p version
    var Str provides := p provides
    while provides<>""
      if not (provides parse any:(var Str name) "," any:(var
        name := provides ; remain := ""
      provide kmap name Bool := true
      provides := remain
  part complete
    var CBool more := false
    each pkg c:env:"package"
      part check_package
        var Link:DebianPackage p :> debian package keyof:pkg
        for (var Int lap) 0 1
          var Str depends := shunt lap=0 p:predepends p:depe
          while depends<>""
            if not (depends parse any:(var Str defs) "," any
              defs := depends ; remain := ""
            var Str alldefs := defs
            part study_one_condition
              if (defs parse any:(var Str def) "|" any:(var 
                var CBool one := false
                while defs<>""
                  if not (defs parse any:(var Str def) "|" a
                    def := defs ; remain2 := ""
                  if not (def parse any:(var Str name) "(" a
                    name := def ; cond := ""
                  if (satisfyed cond c:env:"package":name:"v
                    one := true
                  defs := remain2
                if not one
                  # debian_trace trace "Condition "+alldefs+
                  alldefs parse  any:(var Str defs) "|" any:
                  restart study_one_condition
              else
                if not (defs parse any:(var Str name) "(" an
                  name := defs ; cond := ""
                if (provide kmap name Bool false)
                  void
                eif not (exists c:env:"package":name)
                  var Link:DebianPackage q :> debian package
                  if err=""
                    debian_trace trace "package " p:name " r
                    c:env create "package"
                    c:env:"package" create q:name
                    c:env:"package":(q name) create "version
                    c:env:"package":(q name):"version" := q 
                    c:env:"package":(q name) create "parent"
                    c:env:"package":(q name):"parent" := p name
                    var Str provides := q provides
                    while provides<>""
                      if not (provides parse any:(var Str na
                        name := provides ; remain2 := ""
                      provide kmap name Bool := true
                      provides := remain2
                  else
                    return (failure "Cannot solve condition 
                  more := true
                eif not (satisfyed cond c:env:"package":name
                  var Link:DebianPackage q :> debian package
                  if err="" and ((compare_version q:version 
                    # we can solve the problem through incre
                    debian_trace trace "package " pkg:name "
                    c:env:"package":name "version" := q vers
                    more := true
                  else
                    var Link:DebianPackage q :> debian packa
                    if err=""
                      # try to increase the source package v
                      debian_trace trace "package " pkg:name
                      pkg "version" := q version
                      more := true 
                      restart check_package
                    return (failure "Condition "+defs+" requ
            depends := remain
    if more
      restart complete
  each pkg c:env:"package"
    check pkg:"version"<>"any"
    var Link:DebianPackage p :> debian package keyof:pkg
    check p:name<>""
    var Str conflicts := p conflicts
    while conflicts<>""
      if not (conflicts parse any:(var Str def) "," any:(var
        def := conflicts ; remain := ""
        if not (def parse any:(var Str name) "(" any:(var St
          name := def ; cond := ""
        if (satisfyed cond (debian package name):version)
          debian_trace trace "version is " (debian package n
          return (failure "Package "+p:name+" "+p:version+" 
      conflicts := remain
  status := success
  data_store
  
export debian_select



export DebianDistribution '. bind' '. unpack1' '. unpack'
                    var Str provides := q provides
                    while provides<>""
                      if not (provides parse any:(var Str na
                        name := provides ; remain2 := ""
                      provide kmap name Bool := true
                      provides := remain2
                  else
                    return (failure "Cannot solve condition 
                  more := true
                eif not (satisfyed cond c:env:"package":name
                  var Link:DebianPackage q :> debian package
                  if err="" and ((compare_version q:version 
                    # we can solve the problem through incre
                    debian_trace trace "package " pkg:name "
                    c:env:"package":name "version" := q vers
                    more := true
                  else
                    var Link:DebianPackage q :> debian packa
                    if err=""
                      # try to increase the source package v
                      debian_trace trace "package " pkg:name
                      pkg "version" := q version
                      more := true 
                      restart check_package
                    return (failure "Condition "+defs+" requ
            depends := remain
    if more
      restart complete
  each pkg c:env:"package"
    check pkg:"version"<>"any"
    var Link:DebianPackage p :> debian package keyof:pkg
    check p:name<>""
    var Str conflicts := p conflicts
    while conflicts<>""
      if not (conflicts parse any:(var Str def) "," any:(var
        def := conflicts ; remain := ""
        if not (def parse any:(var Str name) "(" any:(var St
          name := def ; cond := ""
        if (satisfyed cond (debian package name):version)
          debian_trace trace "version is " (debian package n
          return (failure "Package "+p:name+" "+p:version+" 
      conflicts := remain
  status := success
  data_store
  
export debian_select



export DebianDistribution '. bind' '. unpack1' '. unpack'