Hello community,

here is the log from the commit of package nodejs-packaging for 
openSUSE:Factory checked in at 2016-02-25 22:11:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/nodejs-packaging (Old)
 and      /work/SRC/openSUSE:Factory/.nodejs-packaging.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "nodejs-packaging"

Changes:
--------
--- /work/SRC/openSUSE:Factory/nodejs-packaging/nodejs-packaging.changes        
2016-02-17 12:16:53.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.nodejs-packaging.new/nodejs-packaging.changes   
2016-02-26 00:36:59.000000000 +0100
@@ -1,0 +2,26 @@
+Thu Feb 25 01:14:55 UTC 2016 - [email protected]
+
+- update version v10.beta7
+  * fix bugs related with licenses in dependency.rb
+  * nodejs.rb: fix a bug that 'v2.0.0' dir will be renamed
+  * fix a bug in semver.rb
+  * add npkg-mgmt-merge: possible to create a huge bundle
+  * add bower.rb plugin to handle bower dependencies
+  * build C node modules automatically
+  * add a global filter for rpmlint warnings
+
+-------------------------------------------------------------------
+Sun Feb 14 14:00:56 UTC 2016 - [email protected]
+
+- update version v10.beta6
+  * history.rb: some version exists in version timestamp
+    but has no details, not downloadable, so drop them
+  * clean_temp for parent.rb: don't use array substraction,
+    it will all values matched. we just need to free the last
+  * skiploop in dependencies.rb: parents variable can be
+    nested arrays
+  * skip in dependencies.rb: let those "parent" element
+    without "name" variable return -1 to break infinite loop
+  * vcmp.rb: fix a bug in ">=" test
+
+-------------------------------------------------------------------

Old:
----
  nodejs-packaging-10.beta5.tar.gz

New:
----
  nodejs-packaging-10.beta7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ nodejs-packaging.spec ++++++
--- /var/tmp/diff_new_pack.2MTlXK/_old  2016-02-26 00:37:00.000000000 +0100
+++ /var/tmp/diff_new_pack.2MTlXK/_new  2016-02-26 00:37:00.000000000 +0100
@@ -18,21 +18,35 @@
 
 %define         _rpmconfigdir %{_prefix}/lib/rpm
 Name:           nodejs-packaging
-Version:        10.beta5
+Version:        10.beta7
 Release:        0
-Summary:        NodeJS packaging helpers and utilities for openSUSE
+Summary:        Node.js Dependency generators for openSUSE
 License:        MIT
 Group:          Development/Languages/NodeJS
 Url:            https://github.com/marguerite/nodejs-packaging
 Source:         %{name}-%{version}.tar.gz
 BuildArch:      noarch
-Requires:       nodejs
+Requires:       nodejs-devel
 Requires:       ruby
+Requires:       npm(npm)
 Requires:       rubygem(json)
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
-nodejs packaging helpers and utilities for openSUSE.
+This package generates Node.js Provides/Requires dependencies
+automatically for nodejs module packages in openSUSE.
+
+%package -n npkg
+Summary:        The ultimate Node.js packaging toolkit for openSUSE
+Group:          Development/Lanaguages/NodeJS
+Requires:       nodejs-packaging = %{version}
+Requires:       ruby
+Requires:       rubygem(json)
+Requires:       rubygem(nokogiri)
+
+%description -n npkg
+This package provides the ultimate Node.js packaging toolkit
+for openSUSE.
 
 %prep
 %setup -q
@@ -54,8 +68,10 @@
 cp -r tool/* %{buildroot}%{_datadir}/npkg
 cp -r scripts %{buildroot}%{_datadir}/npkg
 ln -sf %{_datadir}/npkg/npkg %{buildroot}%{_bindir}/npkg
-ln -sf %{_datadir}/npkg/scripts/npkg-mgmt-batch-delete.rb 
%{buildroot}%{_bindir}/npkg-mgmt-batch-delete
+ln -sf %{_datadir}/npkg/scripts/npkg-mgmt-pkg-batchrm.rb 
%{buildroot}%{_bindir}/npkg-mgmt-pkg-batchrm
 ln -sf %{_datadir}/npkg/scripts/npkg-mgmt-json2pkgtxt.rb 
%{buildroot}%{_bindir}/npkg-mgmt-json2pkgtxt
+ls -l %{buildroot}%{_datadir}/npkg/scripts/
+ln -sf %{_datadir}/npkg/scripts/npkg-mgmt-merge.rb 
%{buildroot}%{_bindir}/npkg-mgmt-merge
 install -m0644 nodejs.attr %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs.attr
 install -m0755 nodejs.prov %{buildroot}%{_rpmconfigdir}/nodejs.prov
 install -m0755 nodejs.req %{buildroot}%{_rpmconfigdir}/nodejs.req
@@ -70,9 +86,6 @@
 %else
 %config %{_sysconfdir}/rpm/macros.nodejs
 %endif
-%{_bindir}/npkg
-%{_bindir}/npkg-mgmt-batch-delete
-%{_bindir}/npkg-mgmt-json2pkgtxt
 %if 0%{?suse_version} == 1110
 %dir %{_rpmconfigdir}/fileattrs
 %endif
@@ -82,6 +95,13 @@
 %{_rpmconfigdir}/nodejs.rb
 %{_rpmconfigdir}/nodejs-fixdep.rb
 %{_rpmconfigdir}/nodejs
+
+%files -n npkg
+%defattr(-,root,root)
+%{_bindir}/npkg
+%{_bindir}/npkg-mgmt-pkg-batchrm
+%{_bindir}/npkg-mgmt-json2pkgtxt
+%{_bindir}/npkg-mgmt-merge
 %{_datadir}/npkg
 
 %changelog

++++++ nodejs-packaging-10.beta5.tar.gz -> nodejs-packaging-10.beta7.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/TODO 
new/nodejs-packaging-10.beta7/TODO
--- old/nodejs-packaging-10.beta5/TODO  2016-02-12 18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/TODO  2016-02-25 01:47:57.000000000 +0100
@@ -1,4 +1,4 @@
-* global linking 
-* native-build module if there's .gyp present
 * support SLES 11 SP3 at least.
-  + nodejs.prov and nodejs.req. nova don't need to
+  + nodejs.prov and nodejs.req. npkg don't need to
+* support grunt auto tasks
+* support node-nsp security check
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/macros.nodejs 
new/nodejs-packaging-10.beta7/macros.nodejs
--- old/nodejs-packaging-10.beta5/macros.nodejs 2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/macros.nodejs 2016-02-25 01:47:57.000000000 
+0100
@@ -29,6 +29,7 @@
 
 %nodejs_prep %{_prefix}/lib/rpm/nodejs.rb --prep
 %nodejs_mkdir %{_prefix}/lib/rpm/nodejs.rb --mkdir
+%nodejs_build %{_prefix}/lib/rpm/nodejs.rb --build
 %nodejs_copy %{_prefix}/lib/rpm/nodejs.rb --copy
 %nodejs_filelist %{_prefix}/lib/rpm/nodejs.rb --filelist
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nodejs-packaging-10.beta5/nodejs/plugins/gruntfile.rb 
new/nodejs-packaging-10.beta7/nodejs/plugins/gruntfile.rb
--- old/nodejs-packaging-10.beta5/nodejs/plugins/gruntfile.rb   1970-01-01 
01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/nodejs/plugins/gruntfile.rb   2016-02-25 
01:47:57.000000000 +0100
@@ -0,0 +1 @@
+# Execute grunt commands
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs/plugins/nsp.rb 
new/nodejs-packaging-10.beta7/nodejs/plugins/nsp.rb
--- old/nodejs-packaging-10.beta5/nodejs/plugins/nsp.rb 1970-01-01 
01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/nodejs/plugins/nsp.rb 2016-02-25 
01:47:57.000000000 +0100
@@ -0,0 +1 @@
+# performing nodesecurity.io checks for insecurity modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs/semver.rb 
new/nodejs-packaging-10.beta7/nodejs/semver.rb
--- old/nodejs-packaging-10.beta5/nodejs/semver.rb      2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/nodejs/semver.rb      2016-02-25 
01:47:57.000000000 +0100
@@ -211,10 +211,9 @@
                             dep[name] = 
[">=#{va[0]}.#{va[1]}.0","<#{va[0]}.#{(va[1].to_i + 1)}.0"]
                         end    
                             
-                    elsif va == ["0","0","0"]
-                        
+                    elsif va == ["0","0","0"]        
                         if dep.has_key?(name)
-                            dep[name] << [">=0.0.0"]
+                            dep[name] << ">=0.0.0"
                         else
                             dep[name] = [">=0.0.0"]
                         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs/vcmp.rb 
new/nodejs-packaging-10.beta7/nodejs/vcmp.rb
--- old/nodejs-packaging-10.beta5/nodejs/vcmp.rb        2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/nodejs/vcmp.rb        2016-02-25 
01:47:57.000000000 +0100
@@ -10,8 +10,11 @@
                    maj,min = [],[]
                    a = str.split("-") # ["1.0.0","beta.2"]
                    maj = a[0].split(".") # ["1","0","0"]
-                   if a[1].index(".")
+                   if a[1].index(".") # beta.2
                        min = a[1].split(".") # ["beta","2"]
+                   elsif a[1].index(/[a-z][0-9]/) # beta2
+                       b = a[1].gsub(/[0-9].*$/,'')
+                       min = [b,a[1].gsub(b,'')]
                    else
                        min = [a[1]] #["beta"]
                    end
@@ -190,7 +193,7 @@
                         elsif min_result < 0
                                 return false
                         else
-                                return false
+                                return true
                         end
                    else
                         return true
@@ -217,3 +220,4 @@
 
 end
 
+#p Vcmp.comp("0.4.10-rc5",">=","0.4.10-rc4")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs.prov 
new/nodejs-packaging-10.beta7/nodejs.prov
--- old/nodejs-packaging-10.beta5/nodejs.prov   2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/nodejs.prov   2016-02-25 01:47:57.000000000 
+0100
@@ -17,9 +17,7 @@
        unless f.index(/\/usr\/lib.*\/node_modules\/.*\/node_modules/)
                pub << f.strip
        else
-               unless f.index(/\/(test|example.*)\//)
-                       priv << f.strip
-               end
+               priv << f.strip
        end
 
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs.rb 
new/nodejs-packaging-10.beta7/nodejs.rb
--- old/nodejs-packaging-10.beta5/nodejs.rb     2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/nodejs.rb     2016-02-25 01:47:57.000000000 
+0100
@@ -54,48 +54,185 @@
 
 end
 
+def backpath(path="",count="")
+
+        count.times do
+
+                path = path.gsub(/\/$/,'')
+                path = path.gsub(path.gsub(/^.*\//,''),'')
+                unless count == 1
+                        backpath(path,count - 1)
+                end
+
+        end
+
+        return path
+
+end
+
+def find_symlink(symlink="",target="")
+
+        path = symlink.gsub(symlink.gsub(/^.*\//,''),'')
+        count = target.scan("..").count
+        back = backpath(path,count)
+        suffix = target.gsub(/^.*\.\.\//,'')
+        realpath = back + suffix
+
+        return realpath
+end
+
+def filter(file="")
+    f = file.split("/")
+    if 
f.grep(/^\..*$|.*~$|\.bat|\.cmd|Makefile|test(s)?(\.js)?|example(s)?(\.js)?|benchmark(s)?(\.js)?|\.sh|_test\.|browser$|\.orig|\.bak|windows|\.sln|\.njsproj|\.exe|\.c|\.h|\.cc|\.cpp/).empty?
+       unless f.grep(/LICENSE|\.md|\.txt|\.markdown/).empty?
+               io = IO.popen("chmod -x #{file}")
+               io.close
+       end
+       return file
+    else
+        return nil
+    end
+
+end
+
 case ARGV[0]
 when "--prep"
     Dir.glob(sourcedir + "/*.tgz") do |tgz|
         name = tgz.gsub(/^.*\//,'').gsub('.tgz','')
-        io = IO.popen("tar --warning=none -xf #{tgz} -C #{sourcedir}")
+        io = IO.popen("tar --warning=none --no-same-owner 
--no-same-permissions -xf #{tgz} -C #{sourcedir}")
         io.close
         FileUtils.mv sourcedir + "/package",sourcedir + "/" + name
     end
+    
+    # bower
+    if File.exist?(sourcedir + "/bower_components.tar.gz")
+       io = IO.popen("tar --no-same-owner --no-same-permissions -xf 
#{sourcedir}/bower_components.tar.gz -C #{sourcedir}")
+       io.close
+
+       Dir.glob(sourcedir + "/bower_components/**/*.tar.gz") do |dir|
+               dir1 = dir.gsub(dir.gsub(/^.*\//,''),'')
+               io1 = IO.popen("tar --no-same-owner --no-same-permissions -xf 
#{dir} -C #{dir1}")
+               io1.close
+               FileUtils.rm_rf dir
+               Dir.glob(dir1 + "/*") do |i|
+                       io2 = IO.popen("cp -r #{i}/* #{dir1}/")
+                       io2.close
+                       FileUtils.rm_rf i
+               end
+       end
+
+    end
+    
 when "--mkdir"
     json = {}
+    
     Dir.glob(sourcedir + "/*.json") do |j|
        open(j,'r:UTF-8') {|f| json = JSON.parse(f.read)}
     end
+    
     recursive_mkdir(json,buildroot + sitelib)
+    
+when "--build"
+    buildlist = []
+    
+    Dir.glob(sourcedir + "/**/*") do |f|
+        if f.end_with?(".c") || f.end_with?(".h") || f.end_with?(".cc") || 
f.end_with?(".cpp")
+            name = f.gsub(/^.*node_modules\//,'').gsub(/\/.*$/,'')
+            prefix = f.gsub(buildroot,'').gsub(/#{name}\/.*$/,'')
+            prefix = buildroot + prefix + name
+            buildlist << prefix
+        end
+    end
+    
+    buildlist = ( buildlist.uniq! if buildlist.uniq! ) || buildlist
+    
+    buildlist.each do |b|
+        io = IO.popen("pushd #{b} && npm build -f && popd")
+        io.close
+    end
+    # clean middle files
+    Dir.glob(sourcedir + "/**/*") do |f|
+        FileUtils.rm_rf f if f.index(/build\/(Release|Debug)/)
+    end
+    # clean empty directories
+    Dir[sourcedir + "/**/*"].select{|d| File.directory? d}.select{|d| 
(Dir.entries(d) - %w[ . .. ]).empty?}.each{|d| Dir.rmdir d}
+    
 when "--copy"
     Dir.glob(buildroot + "/**/*") do |dir|
-       name = dir.gsub(/^.*\//,'')
-       Dir.glob(sourcedir + "/" + name + "/*") do |f|
-               FileUtils.cp_r f,dir
-       end
+        name = dir.gsub(/^.*\//,'')
+        Dir.glob(sourcedir + "/" + name + "/*") do |f|
+           file = filter(f)
+           unless file.nil?
+               if File.directory? file
+                       dir1 = file.gsub(/^.*[0-9]\.[0-9]/,'')
+                       FileUtils.mkdir_p dir + dir1
+                       Dir.glob(file + "/**/*") do |f1|
+                               f2 = filter(f1)
+                               unless f2.nil?
+                                 FileUtils.cp_r f2,dir + dir1
+                               end
+                       end
+               else
+                       FileUtils.cp_r file,dir
+               end
+           end
+        end
     end
+    
     Dir.glob(buildroot + "/**/*").sort{|x| x.size}.each do |dir|
         name = dir.gsub(/^.*\//,'')
        prefix = dir.gsub(buildroot,'').gsub(name,'')
-        if name.index(/[0-9]\.[0-9]/)
+        if name.index(/-[0-9]\.[0-9]/)
                 FileUtils.mv dir,buildroot + prefix + name.gsub(/-[0-9].*$/,'')
         end
-       if name.index(/test|example|benchmark/)
-               FileUtils.rm_rf dir
-       end
     end
+    
+    # bower
+    main = Dir.glob(buildroot + sitelib + "/*")[0]
+    if Dir.exist?(sourcedir + "/bower_components")
+        Dir.glob(sourcedir + "/bower_components/**/*") do |f|
+                if File.directory?(f)
+                        FileUtils.mkdir_p f.gsub(sourcedir,main)
+                end
+        end
+
+        Dir.glob(sourcedir + "/bower_components/**/*").sort{|x| x.size}.each 
do |f|
+               if File.symlink?(f)
+                       real_target = find_symlink(f,File.readlink(f))
+                       if File.directory? real_target
+                               FileUtils.mkdir_p 
real_target.gsub(sourcedir,main)
+                               Dir.glob(real_target + "/**/*") do |i|
+                                   name = i.gsub(real_target,'')
+                                   FileUtils.ln_sf 
i.gsub(sourcedir,main).gsub(buildroot,''),f.gsub(sourcedir,main) + name
+                               end
+                       else
+                               FileUtils.ln_sf 
real_target.gsub(sourcedir,main).gsub(buildroot,''),f.gsub(sourcedir,main)
+                       end
+               end
+               unless File.directory?(f) || File.symlink?(f) || 
f.end_with?("package.json") || f.end_with?("bower.json")
+                    file = filter(f)
+                    unless file.nil?
+                       f1 = f.gsub(sourcedir + "/bower_components",'')
+                       dir = f.gsub(f1,'').gsub(sourcedir,main)
+                       FileUtils.cp_r file,dir + f1
+                    end
+               end
+       end  
+    end
+ 
 when "--filelist"
+    
     open(sourcedir + "/files.lst","w:UTF-8") do |file|
         Dir.glob(buildroot + "/**/*") do |f|
             if File.directory? f
                unless f == buildroot + "/usr" || f == buildroot + "/usr/lib" 
|| f == buildroot + sitelib
                     file.write "%dir " + f.gsub(buildroot,'') + "\n"
-               end
-            else
+               end     
+           else
                 file.write f.gsub(buildroot,'') + "\n"
             end
         end
     end
+    
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/nodejs.req 
new/nodejs-packaging-10.beta7/nodejs.req
--- old/nodejs-packaging-10.beta5/nodejs.req    2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/nodejs.req    2016-02-25 01:47:57.000000000 
+0100
@@ -12,14 +12,11 @@
 
 ARGF.each do |f| 
   if f.strip.end_with?("package.json")
-       unless f.index(/\/test\//)
-               reqlist << f.strip
-    
-               if f.index(/\/usr\/lib.*\/node_modules\/.*\/node_modules/)
-                       provlist << f.strip
-               end
-       end
-  end 
+    reqlist << f.strip
+    if f.index(/\/usr\/lib.*\/node_modules\/.*\/node_modules/)
+      provlist << f.strip
+    end
+  end
 end
 
 # 1. parse the reqlist
@@ -99,7 +96,6 @@
 end
 
 # 5. calculate the maximum node version
-
 node,max = [],[]
 
 reqlist.each do |j|
@@ -132,7 +128,6 @@
 end
 
 node = ( node.uniq! if node.uniq! ) || node
-
 node.each do |v|
        va = v.split('.')
        va.push('0') if va.size < 3 # from now va.size = 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-batch-delete.rb 
new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-batch-delete.rb
--- old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-batch-delete.rb     
2016-02-12 18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-batch-delete.rb     
1970-01-01 01:00:00.000000000 +0100
@@ -1,42 +0,0 @@
-#!/usr/bin/env ruby
-require 'fileutils'
-
-# run in repository workspace on your local machine,
-# to drop useless packages, it will:
-# 1. delete the previous built RPMs on build service servers
-# 2. remote delete the package in the naming project
-# 3. remove the package's working directory on your local machine
-# 4. clean the repo metadata on your local machine
-# you have to have a "packages.txt" first, which can
-# be generated using `osc list <prj> | grep <keywords>`
-# command or can be written manually.
-
-array = []
-
-File.open("packages.txt",'r:UTF-8') do |f|
-       f.each_line do |l|
-               array << l.strip!
-       end
-end
-
-array.each do |a|
-
-       io2 = IO.popen("osc wipebinaries --all devel:languages:nodejs #{a}")
-       io2.each_line {|l| puts l}
-       io2.close
-
-       io1 = IO.popen("osc rdelete devel:languages:nodejs #{a} -m \"deleted\"")
-       io1.each_line {|l| puts l}
-       io1.close
-
-       if Dir.glob("./#{a}")
-
-               FileUtils.rm_rf 
"/home/marguerite/Public/home:MargueriteSu:branches:devel:languages:nodejs/#{a}"
        
-
-       end
-
-       io = IO.popen("sed -i \"/#{a}/d\" .osc/_packages")
-       io.each_line {|l| puts l}
-       io.close
-
-end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-json-statistics.rb 
new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-json-statistics.rb
--- old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-json-statistics.rb  
2016-02-12 18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-json-statistics.rb  
2016-02-25 01:47:57.000000000 +0100
@@ -0,0 +1,47 @@
+require 'json'
+require 'net/https'
+
+#https://build.opensuse.org/source/devel:languages:nodejs/mocha/mocha.json
+
+OBS = "https://build.opensuse.org";
+REPO = "devel:languages:nodejs"
+pkgs = []
+
+IO.popen("osc list #{REPO}") do |i|
+  i.each_line {|l| pkgs << l.strip unless l.index("nodejs-") || l.strip == 
"nodejs" || l.strip == "scons" || l.strip == "phantomjs" || 
l.strip.index("ruby")}
+end
+
+def login(username="",password="")
+
+       uri = URI.parse(OBS + "/user/login")
+
+       http = Net::HTTP.new(uri.host,uri.port)
+       http.use_ssl = true
+       http.basic_auth username,password
+       resp = http.get(uri.path)
+       cookie = resp.response['set-cookie']
+
+       p resp.code
+       p cookie
+
+end
+
+def json_exist?(pkg="")
+
+       uri = URI.parse(OBS + "/source/" + REPO + "/" + pkg + "/" + pkg + 
".json")
+
+       http = Net::HTTP.new(uri.host,uri.port)
+       http.use_ssl = true
+       http.verify_mode = OpenSSL::SSL::VERIFY_NONE
+       req = Net::HTTP::Get.new(uri.request_uri)
+       req.basic_auth 'MargueriteSu','Zzl612'
+       resp = http.request(req)
+       
+       #p resp.status
+       p resp.body
+       return resp.status
+
+end
+
+login("MargueriteSu","Zzl612")
+#json_exist?("mocha")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-merge.rb 
new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-merge.rb
--- old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-merge.rb    1970-01-01 
01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-merge.rb    2016-02-25 
01:47:57.000000000 +0100
@@ -0,0 +1,109 @@
+#!/usr/bin/env ruby
+
+require 'json'
+
+jsonname,jsonversion = ARGV[0],ARGV[1]
+
+jsonlist,sourcelist,licenselist = [],[],[]
+json,source,license = [],[],""
+
+if ARGV.include?("-i")
+
+       start = ARGV.find_index("-i")
+
+       jsonlist = ARGV[start..-1].delete_if {|i| i == "-i"}
+
+end
+
+jsonlist.each do |l|
+
+       sourcelist << l.gsub(".json",".source")
+       licenselist << l.gsub(".json",".license")
+
+end
+
+# merge jsons
+
+jsonlist.each do |l|
+
+       open(l) do |f|
+
+               json << 
JSON.parse(f.read).to_s.gsub(/^\{/,'').gsub(/\}$/,'').gsub("=>",":")
+
+       end
+
+end
+
+huge = "{\"#{jsonname}\":{\"version\":\"#{jsonversion}\",\"dependencies\":{"
+
+json.each do |l|
+
+       huge += l + ","
+
+end
+
+huge = huge.gsub(/,$/,'') + "}}}"
+
+final = JSON.parse(huge)
+
+open(jsonname + ".json","w") do |f|
+       f.write JSON.pretty_generate(final)
+end
+
+# merge sources
+
+i = 1
+mid = []
+
+sourcelist.each do |s|
+
+       open(s) do |f|
+
+               f.each_line do |l|
+
+                       a = l.gsub(/^Source.*:/,"")
+                       mid << a
+
+               end
+
+       end
+
+end
+
+mid = ( mid.uniq! if mid.uniq! ) || mid
+p mid
+
+open(jsonname + ".source","w") do |f|
+       mid.each do |m|
+               f.write "Source#{i}:\t\thttp:" + m
+               i += 1
+       end
+end
+
+# merge licenses
+
+licenselist.each do |li|
+
+       open(li) do |f|
+               a = f.read.strip
+               unless li == licenselist.last
+                       license += a + " and "
+               else
+                       license += a
+               end
+       end
+
+end
+
+la = license.split(" and ")
+la = ( la.uniq! if la.uniq! ) || la
+
+open(jsonname + ".license","w") do |f|
+       la.each do |i|
+               unless i == la.last
+                       f.write i + " and "
+               else
+                       f.write i
+               end
+       end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-pkg-batchrm.rb 
new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-pkg-batchrm.rb
--- old/nodejs-packaging-10.beta5/scripts/npkg-mgmt-pkg-batchrm.rb      
1970-01-01 01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/scripts/npkg-mgmt-pkg-batchrm.rb      
2016-02-25 01:47:57.000000000 +0100
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+
+# run in repository workspace on your local machine,
+# to drop useless packages, it will:
+# 1. delete the previous built RPMs on build service servers
+# 2. remote delete the package in the naming project
+# 3. remove the package's working directory on your local machine
+# 4. clean the repo metadata on your local machine
+# you have to have a "packages.txt" first, which can
+# be generated using `osc list <prj> | grep <keywords>`
+# command or can be written manually.
+
+array = []
+
+File.open("packages.txt",'r:UTF-8') do |f|
+       f.each_line do |l|
+               array << l.strip!
+       end
+end
+
+array.each do |a|
+
+       io2 = IO.popen("osc wipebinaries --all devel:languages:nodejs #{a}")
+       io2.each_line {|l| puts l}
+       io2.close
+
+       io1 = IO.popen("osc rdelete devel:languages:nodejs #{a} -m \"deleted\"")
+       io1.each_line {|l| puts l}
+       io1.close
+
+       if Dir.glob("./#{a}")
+
+               FileUtils.rm_rf 
"/home/marguerite/Public/home:MargueriteSu:branches:devel:languages:nodejs/#{a}"
        
+
+       end
+
+       io = IO.popen("sed -i \"/#{a}/d\" .osc/_packages")
+       io.each_line {|l| puts l}
+       io.close
+
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/dependencies.rb 
new/nodejs-packaging-10.beta7/tool/dependencies.rb
--- old/nodejs-packaging-10.beta5/tool/dependencies.rb  2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/dependencies.rb  1970-01-01 
01:00:00.000000000 +0100
@@ -1,246 +0,0 @@
-module Dependencies
-
-    # takes a module name, write all its dependent modules
-    # and downloadable files in pretty json
-
-    require 'json'
-    require 'fileutils'
-#=begin
-    require '/usr/lib/rpm/nodejs/semver.rb'
-    require '/usr/lib/rpm/nodejs/vcmp.rb'
-    require '/usr/share/npkg/history.rb'
-    require '/usr/share/npkg/download.rb'
-    require '/usr/share/npkg/parent.rb'
-#=end
-=begin
-    require_relative '../nodejs/semver.rb'
-    require_relative '../nodejs/vcmp.rb'
-    require_relative 'history.rb'
-    require_relative 'download.rb'
-    require_relative 'parent.rb'
-=end
-    include Semver    
-    include Vcmp
-    include History
-    include Download
-
-    @@filelist,@@dependencies = {},{}
-    @@license = []
-    @@number = 0
-
-    def self.skiploop(name='',version='',parents=[])
-       if parents.to_s.index("\"#{name}\"")
-               ind = parents.index(name)
-               str = ""
-               if ind == 0
-                   str = "@@dependencies[\"#{parents[0]}\"][\"version\"]"
-               else
-                   for i in 0..ind do
-                       if i == 0
-                               str = 
"@@dependencies[\"#{parents[i]}\"][\"dependencies\"]"
-                       elsif i == ind
-                               str += "[\"#{parents[i]}\"][\"version\"]"
-                       else
-                               str += "[\"#{parents[i]}\"][\"dependencies\"]"
-                       end
-                   end
-               end
-               verold = eval(str)
-               if verold == version
-                       return true
-               else
-                       return false
-               end
-       else
-               return false
-       end
-    end
-
-    def self.bundled(name='',version='',bundles={})
-       unless bundles.empty?
-               if bundles.keys.include?(name)
-                       if bundles[name] == version
-                               return true
-                       else
-                               return false
-                       end
-               else
-                       return false
-               end
-       else
-               return false
-       end
-    end
-
-    def self.list(name:'',comparator:'',parent:'',bundles:{})
-
-       comparator = "*" if comparator.nil?
-       comphash = Semver.parse(name,comparator) # 
{'clone':['>=1.0.2','<1.1.0']}
-
-       # get latest latest version
-       all = History.all(name)
-       latest = all.last
-
-       # calculate proper version that suits the conditions
-       comphash.reject! do |_k,hv|
-               hv.reject! do |v|
-                       op = v.gsub(/[0-9].*$/,'')
-                       ve = v.gsub(op,'')
-                       Vcmp.comp(latest,op,ve) 
-               end
-               hv.empty?
-       end
-
-       if comphash.empty?
-               version = latest
-        else
-               comphash.values.each do |values|
-                       values.each do |v|
-                               op = v.gsub(/[0-9].*$/,'')
-                               ve = v.gsub(op,'')
-                               # op: '<=' or '<'
-                               if op == '<'
-                                       version = History.last(name,ve)
-                               else
-                                       version = ve
-                               end
-                       end
-               end
-       end
-
-       # if the resolved version does not exist, use the
-       # most reasonable version
-       unless all.include?(version)
-               candidates = []
-               vs = version.split(".").delete_if {|v| v == "0"} # usually 
delete starts from the last
-               all.each do |v|
-                       vs1 = v.split(".")
-                       if vs.size == 2 # no vs.size == 3, because if that the 
version exists in all
-                               if vs1[0] == vs[0] && vs1[1] == vs[1]
-                                       candidates << v
-                               end
-                       elsif vs.size == 1
-                               if vs1[0] == vs[0]
-                                       candidates << v
-                               end
-                       end
-               end
-               version = candidates[-1]        
-       end
-
-       # find the dependencies
-        json = {}
-       open(name,'r:UTF-8') {|f| json = 
JSON.parse(f.read)["versions"][version]}
-
-       if parent.empty?
-               @@dependencies[name] = {}
-               @@dependencies[name]["version"] = version
-       else
-               parents = Parent.new(@@dependencies,parent).find
-               path = Parent.new(@@dependencies,parent).path(parents)
-               if path.class == String
-                   unless self.skiploop(name,version,parents) # child can't 
have parent as dependency
-                     if eval(path)["dependencies"].nil?
-                       eval(path)["dependencies"] = {}
-                       eval(path)["dependencies"][name] = {}
-                       eval(path)["dependencies"][name]["version"] = version
-                     else
-                       if eval(path)["dependencies"][name].nil?
-                               eval(path)["dependencies"][name] = {}
-                               eval(path)["dependencies"][name]["version"] = 
version
-                       end
-                     end
-                   end
-               else
-                   path.each do |ph|
-                     unless self.skiploop(name,version,parents)
-                       if eval(ph)["dependencies"].nil?
-                          eval(ph)["dependencies"] = {}
-                          eval(ph)["dependencies"][name] = {}
-                          eval(ph)["dependencies"][name]["version"] = version
-                       else
-                         if eval(ph)["dependencies"][name].nil?
-                               eval(ph)["dependencies"][name] = {}
-                               eval(ph)["dependencies"][name]["version"] = 
version
-                         end
-                       end
-                     end
-                   end
-               end
-       end
-
-        @@number += 1
-        puts "#{@@number}:#{name}"
-
-       # recursively
-       unless json["dependencies"].nil?
-           # don't loop the parent in child & the dependency provided by 
bundles
-           unless self.skiploop(name,version,parents) || 
self.bundled(name,version,bundles)
-               json["dependencies"].each do |k,v|
-                       
self.list(name:k,comparator:v,parent:name,bundles:bundles)
-               end
-           end
-       end
-
-       # write downloadable filelist
-       if @@filelist[json["name"]]
-               @@filelist[json["name"]] << json["version"]
-       else
-               @@filelist[json["name"]] = [json["version"]]
-       end
-
-       # write licenses
-        if ! json["license"].nil?
-           if json["license"].class == Hash
-               @@license << json["license"]["type"]
-           else
-               @@license << json["license"]
-           end
-       elsif ! json["licenses"].nil?
-               json["licenses"].each do |h|
-                       @@license << h["type"]
-               end
-        end
-
-       @@filelist.values.each {|v| v = (v.uniq! if v.uniq!)||v}
-       @@license = (@@license.uniq! if @@license.uniq!)||@@license
-
-    end
-
-    def self.write(name="",bundles={})
-
-       self.list(name:name,bundles:bundles)
-
-       open(name + '.json','w:UTF-8') do |f|
-               f.write JSON.pretty_generate(@@dependencies)
-       end
-
-       open(name + '.lst','w:UTF-8') do |f|
-               @@filelist.each do |k,v|
-                       v.each do |i|
-                               f.write "#{k}-#{i}\n"
-                       end
-               end
-       end
-
-       open(name + '.license','w:UTF-8') do |f|
-               unless @@license.size > 1
-                       @@license.each {|i| f.write i}
-               else
-                       @@license.each do |i|
-                               unless i == @@license.last
-                                       f.write i + " and "
-                               else
-                                       f.write i
-                               end
-                       end
-               end
-       end
-
-       # clean tmp files
-       @@filelist.keys.each {|k| FileUtils.rm_rf(k) }
-
-    end
-
-end
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/dependency.rb 
new/nodejs-packaging-10.beta7/tool/dependency.rb
--- old/nodejs-packaging-10.beta5/tool/dependency.rb    1970-01-01 
01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/dependency.rb    2016-02-25 
01:47:57.000000000 +0100
@@ -0,0 +1,303 @@
+module Dependency
+
+    # takes a module name, write all its dependent modules
+    # and downloadable files in pretty json
+
+    require 'json'
+    require 'fileutils'
+#=begin
+    require '/usr/lib/rpm/nodejs/semver.rb'
+    require '/usr/lib/rpm/nodejs/vcmp.rb'
+    require '/usr/share/npkg/history.rb'
+    require '/usr/share/npkg/download.rb'
+    require '/usr/share/npkg/parent.rb'
+#=end
+=begin
+    require_relative '../nodejs/semver.rb'
+    require_relative '../nodejs/vcmp.rb'
+    require_relative 'history.rb'
+    require_relative 'download.rb'
+    require_relative 'parent.rb'
+=end
+    include Semver    
+    include Vcmp
+    include History
+    include Download
+
+    @@filelist,@@dependencies = {},{}
+    @@license = []
+    @@number = 0
+    
+    def skip(name='',version='',array=[])
+       
+       if array.include?(name)
+ 
+        ind = 0
+                
+        # find from last
+        array.to_enum.with_index.reverse_each do |k,i|
+            if k == name
+                ind = i
+                break
+            end
+        end
+                
+        str = ""
+        if ind == 0
+            str = "@@dependencies[\"#{array[0]}\"][\"version\"]"
+        else
+            for i in 0..ind do
+                if i == 0
+                    str = "@@dependencies[\"#{array[i]}\"][\"dependencies\"]"
+                elsif i == ind
+                    str += "[\"#{array[i]}\"][\"version\"]"
+                else
+                    str += "[\"#{array[i]}\"][\"dependencies\"]"
+                end
+            end
+        end
+        verold = eval(str)
+        if verold == version
+            return 1
+        else
+            return 0
+        end
+
+       else
+
+               return -1
+       end
+        
+    end
+
+    def skiploop(name='',version='',parents=[])
+       if ( ! parents.nil? ) && parents.to_s.index("\"#{name}\"")
+
+            if parents[0].class == String
+                
+                if skip(name,version,parents) > 0
+                    return true
+                else
+                    return false
+                end
+
+            else
+                arr = []
+                parents.each {|pa| arr << skip(name,version,pa)}
+
+                if arr.include?(0)
+                    return false
+                else
+                    return true
+                end
+                
+            end
+                
+       else
+               return false
+       end
+    end
+
+    def bundled(name='',version='',bundles={})
+       unless bundles.empty?
+               if bundles.keys.include?(name)
+                       if bundles[name] == version
+                               return true
+                       else
+                               return false
+                       end
+               else
+                       return false
+               end
+       else
+               return false
+       end
+    end
+
+    def list(name:'',comparator:'',parent:'',bundles:{})
+
+       comparator = "*" if comparator.nil?
+       comphash = Semver.parse(name,comparator) # 
{'clone':['>=1.0.2','<1.1.0']}
+
+       # get latest latest version
+       all = History.all(name)
+       latest = all.last
+
+       # calculate proper version that suits the conditions
+       comphash.reject! do |_k,hv|
+               hv.reject! do |v|
+                       op = v.gsub(/[0-9].*$/,'')
+                       ve = v.gsub(op,'')
+                       Vcmp.comp(latest,op,ve) 
+               end
+               hv.empty?
+       end
+
+       if comphash.empty?
+               version = latest
+        else
+               comphash.values.each do |values|
+                       values.each do |v|
+                               op = v.gsub(/[0-9].*$/,'')
+                               ve = v.gsub(op,'')
+                               # op: '<=' or '<'
+                               if op == '<'
+                                       version = History.last(name,ve)
+                               else
+                                       version = ve
+                               end
+                       end
+               end
+       end
+
+       # if the resolved version does not exist, use the
+       # most reasonable version
+       unless all.include?(version)
+               candidates = []
+               vs = version.split(".").delete_if {|v| v == "0"} # usually 
delete starts from the last
+               all.each do |v|
+                       vs1 = v.split(".")
+                       if vs.size == 2 # no vs.size == 3, because if that the 
version exists in all
+                               if vs1[0] == vs[0] && vs1[1] == vs[1]
+                                       candidates << v
+                               end
+                       elsif vs.size == 1
+                               if vs1[0] == vs[0]
+                                       candidates << v
+                               end
+                       end
+               end
+               version = candidates[-1]        
+       end
+
+       # find the dependencies
+        json = {}
+       open(name,'r:UTF-8') {|f| json = 
JSON.parse(f.read)["versions"][version]}
+
+       if parent.empty?
+               @@dependencies[name] = {}
+               @@dependencies[name]["version"] = version
+       else
+               parents = Parent.new(@@dependencies,parent).find
+               path = Parent.new(@@dependencies,parent).path(parents)
+               if path.class == String
+                   unless skiploop(name,version,parents) # child can't have 
parent as dependency
+                     if eval(path)["dependencies"].nil?
+                       eval(path)["dependencies"] = {}
+                       eval(path)["dependencies"][name] = {}
+                       eval(path)["dependencies"][name]["version"] = version
+                     else
+                       if eval(path)["dependencies"][name].nil?
+                               eval(path)["dependencies"][name] = {}
+                               eval(path)["dependencies"][name]["version"] = 
version
+                       end
+                     end
+                   end
+               else
+                   path.each do |ph|
+                     unless skiploop(name,version,parents)
+                       if eval(ph)["dependencies"].nil?
+                          eval(ph)["dependencies"] = {}
+                          eval(ph)["dependencies"][name] = {}
+                          eval(ph)["dependencies"][name]["version"] = version
+                       else
+                         if eval(ph)["dependencies"][name].nil?
+                               eval(ph)["dependencies"][name] = {}
+                               eval(ph)["dependencies"][name]["version"] = 
version
+                         end
+                       end
+                     end
+                   end
+               end
+       end
+
+        @@number += 1
+        puts "#{@@number}:#{name}"
+
+       # recursively
+       unless json["dependencies"].nil?
+           # don't loop the parent in child & the dependency provided by 
bundles
+           unless skiploop(name,version,parents) || 
bundled(name,version,bundles)
+               json["dependencies"].each do |k,v|
+                       list(name:k,comparator:v,parent:name,bundles:bundles)
+               end
+           end
+       end
+
+       # write downloadable filelist
+       if @@filelist[json["name"]]
+               @@filelist[json["name"]] << json["version"]
+       else
+               @@filelist[json["name"]] = [json["version"]]
+       end
+
+       # write licenses
+        if ! json["license"].nil?
+           if json["license"].class == Hash
+               @@license << json["license"]["type"]
+           elsif json["license"].class == Array
+               json["license"].each {|h| @@license << h}
+           else
+               @@license << json["license"]
+           end
+       elsif ! json["licenses"].nil?
+           if json["licenses"].class == Array
+               json["licenses"].each do |h|
+                   if h.class == String
+                       @@license << h
+                   else
+                       @@license << h["type"]
+                   end
+               end
+           else # Hash
+               @@license << json["licenses"]["type"]
+           end
+        end
+
+       @@filelist.values.each {|v| v = (v.uniq! if v.uniq!)||v}
+       @@license = (@@license.uniq! if @@license.uniq!)||@@license
+
+    end
+
+    def write(name="",bundles={})
+
+       list(name:name,bundles:bundles)
+
+       open(name + '.json','w:UTF-8') do |f|
+               f.write JSON.pretty_generate(@@dependencies)
+       end
+
+       open(name + '.lst','w:UTF-8') do |f|
+               @@filelist.each do |k,v|
+                       v.each do |i|
+                               f.write "#{k}-#{i}\n"
+                       end
+               end
+       end
+
+       open(name + '.license','w:UTF-8') do |f|
+               unless @@license.size > 1
+                       @@license.each {|i| f.write i}
+               else
+                       @@license.each do |i|
+                               unless i == @@license.last
+                                       f.write i + " and "
+                               else
+                                       f.write i
+                               end
+                       end
+               end
+       end
+
+       # clean tmp files
+       @@filelist.keys.each {|k| FileUtils.rm_rf(k) }
+
+    end
+    
+    module_function :skip,:skiploop
+    module_function :bundled
+    module_function :list
+    module_function :write
+
+end
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/download.rb 
new/nodejs-packaging-10.beta7/tool/download.rb
--- old/nodejs-packaging-10.beta5/tool/download.rb      2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/download.rb      2016-02-25 
01:47:57.000000000 +0100
@@ -4,7 +4,7 @@
 
        require 'net/http'
 
-       def self.get(url='')
+       def get(url='')
 
                path = url.gsub(/^.*\.(com|org)/,'')
                file = url.gsub(/^.*\//,'')
@@ -30,5 +30,7 @@
 
        end
 
+       module_function :get
+
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/history.rb 
new/nodejs-packaging-10.beta7/tool/history.rb
--- old/nodejs-packaging-10.beta5/tool/history.rb       2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/history.rb       2016-02-25 
01:47:57.000000000 +0100
@@ -46,19 +46,19 @@
        def all(name="")
 
                url = "http://registry.npmjs.org/"; + name
-               str = ""
                file = Download.get(url)
+               json,history = {},[]
 
                if File.exist?(file)
-                       File.open(file,'r:UTF-8') {|f| str = f.read}
+                       File.open(file,'r:UTF-8') {|f| json = 
JSON.parse(f.read)}
                end
 
-               json = JSON.parse(str)
-
                histhash = json["time"].reject! {|k,_v| k == "modified" || k == 
"created"}
-
-               history = []
-               histhash.keys.each {|k| history << k}
+               histhash.keys.each do |k|
+                       unless json["versions"][k].nil? # "[email protected]" 
doesn't exist
+                               history << k
+                       end
+               end
 
                return sort(history) # the result is not natively sorted.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/npkg 
new/nodejs-packaging-10.beta7/tool/npkg
--- old/nodejs-packaging-10.beta5/tool/npkg     2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/tool/npkg     2016-02-25 01:47:57.000000000 
+0100
@@ -4,12 +4,15 @@
 
 require 'fileutils'
 #=begin
-require '/usr/share/npkg/dependencies.rb'
+require '/usr/share/npkg/dependency.rb'
+require '/usr/share/npkg/plugins/bower.rb'
 #=end
 =begin
-require_relative 'dependencies.rb'
+require_relative 'dependency.rb'
+require_relative 'plugins/bower.rb'
 =end
-include Dependencies
+include Dependency
+include Bower
 
 name = ARGV[0]
 bundles = {}
@@ -21,7 +24,8 @@
 end
 
 # generate dependency map, downloadable filelist, and complete license string
-Dependencies.write(name,bundles)
+puts "Processing dependencies in package.json"
+Dependency.write(name,bundles)
 
 # generate source.txt
 
@@ -60,18 +64,28 @@
     deltanew = new - cross
 
     deltanew.each do |d|
-      unless d == nil
+      unless d.nil?
        url = "http://registry.npmjs.org/"; + d.gsub(/-[0-9].*$/,'') + "/-/" + d 
+ ".tgz"
-       IO.popen("wget --tries=0 #{url}")
+       io = IO.popen("wget --tries=0 #{url}")
+       io.close
       end
     end
     FileUtils.rm_rf name + '.lst'
 
     deltaold.each do |d|
-      unless d == nil
-       IO.popen("osc delete #{d}.tgz")
+      unless d.nil?
+       p "#{d}.tgz needs to be deleted from source"
       end
     end
 
 end
+
+# bower
+io = IO.popen("tar -xf #{name}-*.tgz")
+io.close
+if File.exist? "package/bower.json"
+       puts "Processing dependencies in bower.json"
+       Bower.install(name)
+end
+FileUtils.rm_rf "package"
 #=end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/parent.rb 
new/nodejs-packaging-10.beta7/tool/parent.rb
--- old/nodejs-packaging-10.beta5/tool/parent.rb        2016-02-12 
18:57:59.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/parent.rb        2016-02-25 
01:47:57.000000000 +0100
@@ -16,7 +16,7 @@
                     find(json.values[0]["dependencies"],parent)
                 else
                     json.keys.each do |k|
-                        unless json[k]["dependencies"] == nil
+                        unless json[k]["dependencies"].nil?
                             if json[k]["dependencies"].to_s.index('"' + parent 
+ '"')
                                 @keys << k
                                 self.find(json[k]["dependencies"],parent)
@@ -46,20 +46,18 @@
         
         def clean_temp(temp=@temp)
             
-            newtemp = [temp[-1]]
+            newtemp,result = [temp[-1]],[]
            
             if temp.size > 1 # temp = 1, most of the times don't need to clean
                 last = get_str(temp)
                 looptimes = eval(last).select{|k,v| v.to_s.index(@parent) || k 
== @parent}.keys.size
-
                 if @arrkeys.to_s.scan(@parent).count == looptimes
                     temp.each_index do |i|
                         n = temp.size - i - 1 # 5 - i
-                        
#["gulp","gulp-utils","dateformat","meow","read-pkg-up","find-up"]
                         str = get_str(temp[0...n])
                         s = eval(str).select{|k,v| k != temp[n+1] && ( 
v.to_s.index(@parent) || k == @parent)}
                         newtemp << temp[n]
-                        if s != nil && s.keys.size >= 1
+                        if ! s.nil? && s.keys.size >= 1
                             break
                         else
                             next
@@ -68,12 +66,22 @@
                 end
             end
 
-            return (temp - newtemp)
+            # delete from the last of temp
+            temp.to_enum.with_index.reverse_each do |k,i|
+
+                if newtemp.include?(k)
+                    temp.each_with_index {|m,j| result << m unless j == i}
+                    newtemp.delete_if {|n| n == k}
+                end
+
+            end
+            
+            return result
         end
 
        def find(json=@json,parent=@parent)
             
-            unless json == nil
+            unless json.nil?
                 
                 count = json.to_s.scan("\"#{parent}\"").count
                 if count > 1
@@ -81,6 +89,10 @@
                     if json.keys.size == 1
                         @temp << json.keys[0]
                         find(json.values[0]["dependencies"],parent)
+                        unless @keys.empty?
+                           @temp.each {|t| @arrkeys << t}
+                           @keys.each {|k| @arrkeys << k}
+                        end
                     else
                         json.each do |k,v|
                           if k == parent || v.to_s.index("\"#{parent}\"")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/plugins/bower.rb 
new/nodejs-packaging-10.beta7/tool/plugins/bower.rb
--- old/nodejs-packaging-10.beta5/tool/plugins/bower.rb 1970-01-01 
01:00:00.000000000 +0100
+++ new/nodejs-packaging-10.beta7/tool/plugins/bower.rb 2016-02-25 
01:47:57.000000000 +0100
@@ -0,0 +1,118 @@
+module Bower
+
+       require 'json'
+       require 'fileutils'
+       require 'nokogiri'
+       require 'open-uri'
+#=begin
+       require '/usr/share/npkg/download.rb'
+       require '/usr/share/npkg/history.rb'
+       require '/usr/lib/rpm/nodejs/semver.rb'
+       require '/usr/lib/rpm/nodejs/vcmp.rb'
+#=end
+=begin
+       require_relative "../download.rb"
+       require_relative "../history.rb"
+       require_relative "../../nodejs/semver.rb"
+       require_relative "../../nodejs/vcmp.rb"
+=end
+       include Semver
+       include Vcmp
+       include Download
+       include History
+
+       def dependency(name="")
+
+               json = {}
+               open("package/bower.json") {|f| json = JSON.parse(f.read)}
+               return json["dependencies"]
+
+       end
+
+       def lookup(name="")
+
+               json = dependency(name)
+               jsonnew = {}
+
+               json.each do |k,v|
+                       url,j,version = "",{},""
+                       file = 
Download.get("http://bower.herokuapp.com/packages/"; + k)
+                       if File.exist?(file)
+                               open(file) {|f| j = JSON.parse(f.read)}
+                               FileUtils.rm_f file
+                               url = 
j["url"].gsub("git://","https://";).gsub(".git","")
+                               html = Nokogiri::HTML(open(url + "/tags"))
+                               versions_pre,versions,matches = [],[],[]
+                               html.xpath('//span[@class="tag-name"]').each 
{|f| versions_pre << f.text
+}
+                               # remove the prefix "v" in eg v3.0.0
+                               versions_pre.each do |v1|
+                                       if v1.index(/^v/)
+                                               versions << v1.gsub("v","")
+                                       else
+                                               versions << v1
+                                       end
+                               end
+
+                               semver = Semver.parse(k,v)
+                               versions.each do |i|
+                                 arr = []
+                                 semver.values.each do |v1|
+                                   v1.each do |v2|
+                                       op = v2.gsub(/[0-9].*$/,'')
+                                       ve = v2.gsub(op,'')
+                                       if Vcmp.comp(i,op,ve)
+                                               arr << 1
+                                       else
+                                               arr << 0
+                                       end
+                                   end
+                                 end
+                                 matches << i unless arr.include?(0)
+                               end
+
+                               match = matches[0]
+
+                               versions_pre.each do |v1|
+                                       if v1.index(match)
+                                               match = v1
+                                               break
+                                       end
+                               end
+
+                               url = url + "/archive/" + match + ".tar.gz"
+
+                       end
+                       jsonnew[k] = url
+               end
+
+               return jsonnew
+
+       end
+
+       def install(name="")
+
+               json = lookup(name)
+               json.each do |k,v|
+                       io = IO.popen("mkdir -p bower_components/#{k}")
+                       io.close
+                       io1 = IO.popen("wget #{v}")
+                       io1.close
+                       tarball = v.gsub(/^.*\//,'')
+                       if File.exist? tarball
+                               FileUtils.mv tarball,"bower_components/#{k}/"
+                       end
+               end
+
+               if File.exist? "bower_components"
+                       io = IO.popen("tar -czf bower_components.tar.gz 
bower_components")
+                       io.close
+                       FileUtils.rm_rf "bower_components"
+               end
+
+       end
+
+       module_function :dependency,:lookup,:install
+
+end
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nodejs-packaging-10.beta5/tool/template 
new/nodejs-packaging-10.beta7/tool/template
--- old/nodejs-packaging-10.beta5/tool/template 2016-02-12 18:57:59.000000000 
+0100
+++ new/nodejs-packaging-10.beta7/tool/template 2016-02-25 01:47:57.000000000 
+0100
@@ -41,7 +41,7 @@
 %nodejs_prep
 
 %build
-#nothing to do
+%nodejs_build
 
 %install
 %nodejs_mkdir
@@ -50,7 +50,7 @@
 # make your changes here, suppose:
 # %{buildroot}%{nodejs_sitelib}/%{name} exists
 # you can copy, modify stuff, like:
-# ln -s %{nodejs_sitelib}/gulp/bin/gulp \
+# ln -sf %{nodejs_sitelib}/gulp/bin/gulp \
 # %{buildroot}%{_bindir}/gulp
 # but your changes won't be tracked by files.lst
 # so write them manually


Reply via email to