Difference between revisions of "User:Kr/Concurrent Checkout"

From Apache OpenOffice Wiki
Jump to: navigation, search
m (First sketch.)
 
m
Line 7: Line 7:
 
   shell="/bin/sh"
 
   shell="/bin/sh"
 
   CVSserver="anoncvs@anoncvs.services.openoffice.org"
 
   CVSserver="anoncvs@anoncvs.services.openoffice.org"
#  CVSserver="kr@so-cvs-tunnel.germany.sun.com"
+
#  CVSserver="kr@mytunnel"
  
 
   split(modules,amodules)
 
   split(modules,amodules)

Revision as of 12:33, 6 March 2007

#!/usr/bin/awk -f

#39

function co(modules,amodules) {
  shell="/bin/sh"
  CVSserver="anoncvs@anoncvs.services.openoffice.org"
#  CVSserver="kr@mytunnel"

  split(modules,amodules)
  for (i in amodules) {
    printf("cvs '-d:pserver:%s:/cvs' co -rSRC680_m203 %s \n",CVSserver,amodules[i]) | shell
#    printf("cvs '-d:pserver:%s:/cvs' co -rSRC680_m203 %s > /dev/null &\n",CVSserver,amodules[i]) | shell
  }
 
  printf("wait\n") | shell
  close(shell)
}

BEGIN {
  # smodules: module status array
  ana("instsetoo_native")
#  ana("instsetoo_native")

  bmodules="config_office dmake"
  n = asorti(smodules,dest)
  for (i in dest) {
    if (smodules[dest[i]] == 2) {
      bmodules=bmodules " " dest[i]
    }
  }

  print "checking out needed modules: " bmodules " ..."
  co(bmodules) 
}

function ana(modules,cnt,recs,line,nf,i,j,module) {
  split(modules,amodules)

  # create list of needed modules
  bmodules=""
  for (i in amodules) {
    if (!(amodules[i] in smodules) || smodules[amodules[i]] == 0) {
      smodules[amodules[i]] = 1 # mark this module as tested
      bmodules=bmodules " " amodules[i]"/prj/build.lst"
    }
  }

  print "getting build.lst for " bmodules " ..."
  co(bmodules)

  modules=""
  # walk the dependencies
  for (i in amodules) {
    # check if the module is there now, other just continue
    if (getline < (amodules[i]"/prj/build.lst") >= 0) {
      smodules[amodules[i]] = 2 # mark this module as valid
      close(amodules[i]"/prj/build.lst")

      # get dependencies
      do { 
        cnt = getline line < (amodules[i]"/prj/build.lst")
      }
      while(cnt >= 0 && line ~ /^#.*/)
      close(amodules[i]"/prj/build.lst")

      if (cnt >= 0) {
        nf = split(line, recs)
        j = 4
        while(j < nf) {
          tmp=index(recs[j],":")
          if (tmp == 0)
            tmp=1
          else
            tmp=tmp+1

          module=substr(recs[j],tmp)
          if (!(module in smodules)) {
            modules = modules " " module
            smodules[module] = 0
          }

          j=j + 1
        }
      }
    }
    else
      smodules[amodules[i]] = 1 # mark this module as invalid

  }

  if (length(modules) > 0)
    ana(modules)
}
Personal tools