File update-sources.sh of Package matrix-appservice-irc

#!/bin/bash

set -e

export NODE_PATH="${NODE_PATH:-/usr/lib/node_modules}"

node -e "require('npm-remote-ls')"

update_specfile () {
  local specfile
  for specfile in "$@"; do
    local package="`rpmspec -q --qf '%{NAME}' \"$specfile\"`"
    local version="`rpmspec -q --qf '%{VERSION}' \"$specfile\"`"
    package="${package#nodejs-}"
    { 
      sed -n -e '1,/^#NODEJS_BUNDLED_DEPS_BEGIN$/p' "$specfile"
      node -e "
        var npmls = require('npm-remote-ls');
        var package = '$package';
        var version = '$version';
        npmls.config({verbose: false, development: false, optional: true});
        npmls.ls(package, version, true, function(deps) {
          var i = 100;
          deps.sort();
          deps.forEach(function(p) {
            var pos = p.lastIndexOf('@');
            var name = p.substring(0, pos);
            var ver = p.substring(pos + 1);
            var scope = '';
            var namesuffix = '';
            pos = name.lastIndexOf('/');
            if (pos > 0) {
              scope = name.substring(0, pos);
              name = name.substring(pos + 1);
              namesuffix = '#/' + scope + '-' + name + '-' + ver + '.tgz';
            }
            if (name != package || ver != version) {
              if (name != 'iconv') {
                console.log('Source' + i + ': https://registry.npmjs.org/' +
                            scope + '/' + name + '/-/' +
                            name + '-' + ver + '.tgz' + namesuffix);
                i++;
              }
            }
          });
        });
      " | grep '^Source'
      sed -n -e '/^#NODEJS_BUNDLED_DEPS_END$/,$p' "$specfile"
    } > "$specfile.tmp" && mv "$specfile.tmp" "$specfile"
  done
}

if [ $# -gt 0 ]; then
  update_specfile "$@"
else
  update_specfile *.spec
fi