Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package linuxrc-devtools for 
openSUSE:Factory checked in at 2021-04-15 16:57:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/linuxrc-devtools (Old)
 and      /work/SRC/openSUSE:Factory/.linuxrc-devtools.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "linuxrc-devtools"

Thu Apr 15 16:57:39 2021 rev:14 rq:885391 version:1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/linuxrc-devtools/linuxrc-devtools.changes        
2021-04-08 21:32:53.583855040 +0200
+++ 
/work/SRC/openSUSE:Factory/.linuxrc-devtools.new.12324/linuxrc-devtools.changes 
    2021-04-15 16:58:21.430763528 +0200
@@ -1,0 +2,20 @@
+Wed Apr 14 14:26:15 UTC 2021 - wfe...@opensuse.org
+
+- merge gh#openSUSE/linuxrc-devtools#30
+- improved git2log parser
+- fix handling of %setup macro
+- rewrite tobs script to not rely on config file but to use command
+  line options instead
+- update build_it jenkins wrapper script
+- update submit_it jenkins wrapper script
+- update README and move to asciidoc
+- 1.0
+
+--------------------------------------------------------------------
+Mon Apr 12 09:51:32 UTC 2021 - wfe...@opensuse.org
+
+- merge gh#openSUSE/linuxrc-devtools#29
+- fix handling of %setup macro
+- 0.21
+
+--------------------------------------------------------------------

Old:
----
  linuxrc-devtools-0.20.tar.xz

New:
----
  linuxrc-devtools-1.0.tar.xz

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

Other differences:
------------------
++++++ linuxrc-devtools.spec ++++++
--- /var/tmp/diff_new_pack.dSj7ez/_old  2021-04-15 16:58:21.854764199 +0200
+++ /var/tmp/diff_new_pack.dSj7ez/_new  2021-04-15 16:58:21.858764205 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           linuxrc-devtools
-Version:        0.20
+Version:        1.0
 Release:        0
 Source:         %{name}-%{version}.tar.xz
 

++++++ linuxrc-devtools-0.20.tar.xz -> linuxrc-devtools-1.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/README.adoc 
new/linuxrc-devtools-1.0/README.adoc
--- old/linuxrc-devtools-0.20/README.adoc       1970-01-01 01:00:00.000000000 
+0100
+++ new/linuxrc-devtools-1.0/README.adoc        2021-04-14 16:26:15.000000000 
+0200
@@ -0,0 +1,183 @@
+# Linuxrc development tools
+
+This is a collection of scripts used to connect http://github.com[Github]
+via http://jenkins-ci.org[Jenkins] to the https://build.opensuse.org[Open 
Build Service].
+
+For these to work the git project must fulfill some requirements:
+
+* there must be a `clean` or `distclean` make target that really cleans up
+  everything
+* there must be an `archive` target that creates a source tar file (details see
+  below)
+
+## Tools
+
+### git2log
+
+Generate a changelog file based on git commit messages.
+
+If your commit message is split into a single line short comment and a
+detailed description separated by an empty line, just the short comment is
+used. Alternatively, precede each commit line with a dash '-' to get
+multiple changelog entries.
+
+Expects numerical tags matching version number, like 1.2.3. For branches !=
+master, tags should be `<branch>-<version>`.
+
+You can create test branches from any main branch (e.g. for pull requests,
+with `git co -b`). _git2log_ recognizes those branches and treats them as
+continuation of the main branch.
+
+### tobs
+
+Sample usage (submit current git state to `foo:bar:devel` devel project in
+open build service:
+
+```
+tobs --target obs://foo:bar:devel
+```
+
+You can append a package name to the target spec, like:
+
+```
+tobs --target obs://foo:bar:devel/zap
+```
+
+This is useful if the git repository name and the package name differ.
+
+There must be a make target `archive` that has created:
+
+* a `VERSION` file
+* a `changelog` file
+* a source archive `package/<name>-<version>.tar.xz`
+* optionally other source files (that will be mentioned in `+*.spec+`) below 
`package/`
+
+Ideally, repeated make runs should produce exactly the same archive file as
+long as the git repo stays unchanged.
+
+The script gets the current build service package, updates it with the new
+sources, adjust the `+*.spec+` file to remove any old patches, updates the
+`+*.changes+` file and commits the new package back to the build service (to 
the
+same project). It will auto-add comments about removed patches and
+removed/added source files.
+
+If it does not yet exist it creates a new version number tag in the git
+repo.
+
+Note that you need a `$HOME/.oscrc` file with sufficient authentication info
+to access the build service and to write to the git repo (to push the tag).
+
+There is a `--try` option that does everything except actually submitting
+the changes to the build service or setting the new tag. Use together with
+`--save-temp` to debug things.
+
+#### tobs --sr
+
+Sample usage (wait for the package to build sucessfully in `foo:bar:devel`,
+then submit to `openSUSE:Factory`):
+
+```
+tobs --target obs://foo:bar:devel --sr obs://openSUSE:Factory --wait-for-ok
+```
+
+If you use the `--sr` option _tobs_ will create a build service submit request.
+With `--wait-for-ok` it optionally waits until the package has been built
+successfully in the development project.
+
+#### $HOME/.tobsrc
+
+_tobs_ uses a config file with basic data about the open build service. It
+can also have a list of aliases for bvuild service projects.
+
+It uses ini-file syntax.
+
+Sample file:
+
+```
+[obs]
+api=api.opensuse.org
+
+[xbs]
+api=api.example.org
+prefix[obs]=openSUSE.org
+
+[aliases]
+factory=obs://openSUSE:Factory
+devel-factory=obs://foo:bar:devel
+```
+
+This means
+
+- `obs` refers to api.opensuse.org
+- `xbs` refers to api.example.org
+- `obs` can be accessed via `xbs` by using an `openSUSE.org` prefix to project 
names
+- `factory` and `devel-factory` can be used as aliases in _tobs_ to specify 
projects; this means
++
+--
+```
+tobs --target devel-factory --sr factory
+```
+would be equivalent to
+```
+tobs --target obs://foo:bar:devel --sr obs://openSUSE:Factory
+```
+--
+
+### build_it
+
+Wrapper script for _tobs_ to be run by Jenkins.
+
+For example
+
+```
+build_it --target obs://foo:bar:devel --branch main
+```
+
+checks out branch `main`, runs `make archive`, and then `tobs` to submit the 
package.
+
+
+### submit_it
+
+Wrapper script for `tobs --sr` to be run by Jenkins.
+
+For example
+
+```
+submit_it --target obs://foo:bar:devel/zap --sr obs://openSUSE:Factory
+```
+
+Waits for package `zap` to be built at `foo:bar:devel` and then submits to 
`openSUSE:Factory`.
+
+## openSUSE development
+
+### Workflow
+
+At a first glance, Linuxrc (and related projects) follows the same approach as 
other YaST projects:
+changes are tracked on Github and Jenkins CI will take care of submitting them 
to OBS. However,
+tools used by these projects are different from the ones used for YaST.
+
+Those tools are available in 
http://github.com/openSUSE/linuxrc-devtools[linuxrc-devtools].
+Next we'll introduce them (and how are they related to Jenkins) but it's 
recommended to check the
+https://github.com/openSUSE/linuxrc-devtools/blob/master/README.adoc[documentation]
+in the repository.
+
+When Jenkins detect changes on, for example,
+http://github.com/openSUSE/linuxrc[linuxrc] Git repository, it will build the
+project using the
+https://github.com/openSUSE/linuxrc-devtools/blob/master/build_it[build_it] 
script.
+This script is just a wrapper that, after building the `make archive` target,
+will invoke
+https://github.com/openSUSE/linuxrc-devtools/blob/master/tobs[tobs] which
+will take care of submitting the new version to the development project on OBS.
+
+If the previous step ran successfully, then a submit request to the final
+project will be created through the
+https://github.com/openSUSE/linuxrc-devtools/blob/master/submit_it[submit_it] 
script,
+which is just another wrapper script that will rely on `tobs`.
+
+### linuxrc-devtools
+
+The package is automatically submitted from the `master` branch to
+https://build.opensuse.org/package/show/system:install:head/linuxrc-devtools[system:install:head]
+OBS project. From that place it is forwarded to
+https://build.opensuse.org/project/show/openSUSE:Factory[openSUSE Factory].
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/README.md 
new/linuxrc-devtools-1.0/README.md
--- old/linuxrc-devtools-0.20/README.md 2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/README.md  1970-01-01 01:00:00.000000000 +0100
@@ -1,192 +0,0 @@
-# Linuxrc development tools
-
-This is a collection of scripts used to connect [Github](http://github.com/)
-via [Jenkins](http://jenkins-ci.org/) to the [Open Build
-Service](https://build.opensuse.org/).
-
-For these to work the git project must fulfill some requirements:
-
-* there must be a `clean` or `distclean` make target that really cleans up
-  everything
-* there must be an `archive` target that creates a source tar file (details see
-  below)
-
-## Tools
-
-### git2log
-
-Generate a changelog file based on git commit messages.
-
-If your commit message is split into a single line short comment and a
-detailed description separated by an empty line, just the short comment is
-used. Alternatively, precede each commit line with a dash '-' to get
-multiple changelog entries.
-
-Expects numerical tags matching version number, like 1.2.3. For branches !=
-master, tags should be `<branch>-<version>`.
-
-You can create test branches from any main branch (e.g. for pull requests,
-with `git co -b`). _git2log_ recognizes those branches and treats them as
-continuation of the main branch.
-
-From _git2log's_ perspective a test branch is just a branch without tags in
-it. But it should also have a name starting with either 'test' or 'bnc' as
-_tobs_ expects this.
-
-### tobs
-
-Commit current git state to build service.
-
-There must be a make target `archive` that **has created**:
-
-* a `VERSION` file
-* a `changelog` file
-* a source archive `package/<name>-<version>.tar.xz`
-* optionally other source files (that will be mentioned in `*.spec`) below 
`package/`
-
-Ideally, repeated make runs should produce exactly the same archive file as
-long as the git repo stays unchanged.
-
-The script gets the current build service package, updates it with the new
-sources, adjust the `*.spec` file to remove any old patches, updates the
-`*.changes` file and commits the new package back to the build service (to the
-same project). It will auto-add comments about removed patches and
-removed/added source files.
-
-If it does not yet exist it creates a new version number tag in the git
-repo.
-
-Note that you need a `$HOME/.oscrc` file with sufficient authentication info
-to access the build service and to write to the git repo (to push the tag).
-
-There is a `--try` option that does everything except actually submitting
-the changes to the build service or setting the new tag. Use together with
-`--save-temp` to debug things.
-
-If you are on a branch with a name starting with either 'test' or 'bnc',
-_tobs_ handles this as a test build. That is, the package is submitted to a
-special test project (see 'test' entry in config file) and no submit
-requests are created.
-
-#### tobs --sr
-
-If you use the `--sr` option it will create a build service submit request.
-With `--wait-for-ok` it optionally waits until the package has been built
-successfully in the originating project.
-
-#### $HOME/.tobsrc
-
-_tobs_ uses a config file to relate build service projects to git repos.
-
-Note: section names are arbitrary and used only for logging. You can have
-multiple sections with the same name. If several sections match (based on
-package and branch names) the first match is used. So put more general
-sections last.
-
-Examples:
-
-    [factory]
-    branch=master
-    prj=system:install:head
-    test=home:xxx:factory
-    sr=openSUSE:Factory
-    bs=api.opensuse.org
-
-If you are on branch master, look up a package with the same name as the
-git project in the system:install:head build service project ('devel
-project'). When creating a submit request, submit to openSUSE:Factory. Use
-the opensuse.org build service.
-
-Test builds are done in home:xxx:factory.
-
-    [factory]
-    package=perl-Bootloader
-    gitname=perl-bootloader
-    branch=master
-    prj=Base:System
-    sr=openSUSE:Factory
-    bs=api.opensuse.org
-
-Similar as above but git project name and build service package name
-differ. Note that `make archive` must produce a name matching the build
-service package, not the git repo name.
-
-    [factory]
-    package=installation-images
-    branch=master
-    prj=system:install:head
-    sr=openSUSE:Factory/installation-images-openSUSE
-    bs=api.opensuse.org
-
-Similar to first example but build service package names differ in devel
-project and target project (e.g. you have several `*.spec` files).
-
-If the submit request should go to a different buildservice than the one
-where the project was built, use the 'bs_sr' entry to specify the build
-service for the sr and the prefix to access one bs from the other.
-
-For example:
-
-    [sle12]
-    branch=master
-    prj=system:install:head
-    test=home:xxx:factory
-    sr=SUSE:SLE-12:Update
-    bs=api.opensuse.org
-    bs_sr=api.foo.bar,openSUSE.org:
-
-Sources are built in system:install:head on api.opensuse.org but the result
-is submitted from openSUSE.org:system:install:head to SUSE:SLE-12:Update on
-api.foo.bar.
-
-### build_it
-
-  Wrapper script for _tobs_ to be run by Jenkins.
-
-  `tobs <branch>` checks out <branch>, runs `make archive`, and then `tobs`.
-
-
-### submit_it
-
-  Wrapper script for `tobs --sr` to be run by Jenkins.
-
-  This assumes the Jenkins job name to be `<foo>-sr` and a previously
-  finished Jenkins job `<foo>`. It changes to the `<foo>` workspace and runs
-  `tobs --wait-for-ok --sr`.
-
-## openSUSE development
-
-### Workflow
-
-At a first glance, Linuxrc (and related projects) follows the same approach as 
other YaST projects:
-changes are tracked on Github and Jenkins CI will take care of submitting them 
to OBS. However,
-tools used by these projects are different from the ones used for YaST.
-
-Those tools are available in 
[linuxrc-devtools](http://github.com/openSUSE/linuxrc-devtools).
-Next we'll introduce them (and how are they related to Jenkins) but it's 
recommended to check the
-[documentation](https://github.com/openSUSE/linuxrc-devtools/blob/master/README.md)
-in the repository.
-
-When Jenkins detect changes on, for example,
-[Linuxrc](http://github.com/openSUSE/linuxrc) Git repository, it will build the
-project using [build_it
-script](https://github.com/openSUSE/linuxrc-devtools/blob/master/build_it).
-This script is just a wrapper that, after building the `make archive` target,
-will invoke
-[tobs](https://github.com/openSUSE/linuxrc-devtools/blob/master/tobs) which
-will take care of submitting the new version to the development project on OBS.
-Branches, projects, etc. to submit to are defined in `tobs` configuration. For
-example, for _Factory_, `master` branch will be submitted to 
`system:install:head/linuxrc`.
-
-If the previous step ran successfully, then a submit request to the final
-project will be created through the [submit_it
-script](https://github.com/openSUSE/linuxrc-devtools/blob/master/submit_it),
-which is just another wrapper script that will rely on `tobs`. For example, for
-_Factory_, the project will be submitted to `openSUSE:Factory/linuxrc`.
-
-### linuxrc-devtools
-
-The package is automatically submitted from the `master` branch to
-[system:install:head](https://build.opensuse.org/package/show/system:install:head/linuxrc-devtools)
-OBS project. From that place it is forwarded to
-[openSUSE Factory](https://build.opensuse.org/project/show/openSUSE:Factory).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/VERSION 
new/linuxrc-devtools-1.0/VERSION
--- old/linuxrc-devtools-0.20/VERSION   2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/VERSION    2021-04-14 16:26:15.000000000 +0200
@@ -1 +1 @@
-0.20
+1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/build_it 
new/linuxrc-devtools-1.0/build_it
--- old/linuxrc-devtools-0.20/build_it  2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/build_it   2021-04-14 16:26:15.000000000 +0200
@@ -5,8 +5,8 @@
 branch=master
 
 while true ; do
-  if [ "$1" = "--dist" -o "$1" = "--target" ] ; then
-    dist="--target $2"
+  if [ "$1" = "--target" ] ; then
+    target="--target $2"
     shift
     shift
     continue
@@ -43,10 +43,6 @@
   break
 done
 
-if [ -n "$1" ] ; then
-  branch=$1
-fi
-
 git status
 git checkout $branch
 git pull
@@ -67,7 +63,7 @@
   $prepare
 fi
 
-tobs $spec_opt $obs_opt $dist
+tobs $target $spec_opt $obs_opt
 
 if [ -z "$prepare" ] ; then
   make $clean_target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/changelog 
new/linuxrc-devtools-1.0/changelog
--- old/linuxrc-devtools-0.20/changelog 2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/changelog  2021-04-14 16:26:15.000000000 +0200
@@ -1,3 +1,17 @@
+2021-04-14:    1.0
+       - merge gh#openSUSE/linuxrc-devtools#30
+       - improved git2log parser
+       - fix handling of %setup macro
+       - rewrite tobs script to not rely on config file but to use command
+         line options instead
+       - update build_it jenkins wrapper script
+       - update submit_it jenkins wrapper script
+       - update README and move to asciidoc
+
+2021-04-12:    0.21
+       - merge gh#openSUSE/linuxrc-devtools#29
+       - fix handling of %setup macro
+
 2021-04-08:    0.20
        - merge gh#openSUSE/linuxrc-devtools#27
        - rebuild changelog file if needed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/submit_it 
new/linuxrc-devtools-1.0/submit_it
--- old/linuxrc-devtools-0.20/submit_it 2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/submit_it  2021-04-14 16:26:15.000000000 +0200
@@ -5,15 +5,15 @@
 wait_opt=--wait-for-ok
 
 while true; do
-  if [ "$1" = "--dist" -o "$1" = "--target" ] ; then
-    dist="--target $2"
+  if [ "$1" = "--target" ] ; then
+    target="--target $2"
     shift
     shift
     continue
   fi
 
-  if [ "$1" = "--package" ] ; then
-    package="--package $2"
+  if [ "$1" = "--sr" ] ; then
+    sr="--sr $2"
     shift
     shift
     continue
@@ -28,16 +28,4 @@
   break
 done
 
-# we need neither git directory nor JOB_NAME if package has been specified
-if [ -z "$package" ] ; then
-  job_name=${JOB_NAME%-sr}
-
-  if [ -z "$job_name" -o "$job_name" = "$JOB_NAME" ] ; then
-    echo "$JOB_NAME: unexpected job"
-    exit 1
-  fi
-
-  cd "../$job_name"
-fi
-
-tobs $wait_opt --sr $dist $package
+tobs $wait_opt $target $sr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linuxrc-devtools-0.20/tobs 
new/linuxrc-devtools-1.0/tobs
--- old/linuxrc-devtools-0.20/tobs      2021-04-08 13:25:31.000000000 +0200
+++ new/linuxrc-devtools-1.0/tobs       2021-04-14 16:26:15.000000000 +0200
@@ -130,8 +130,9 @@
 
 sub usage;
 sub get_rc;
-sub get_gitdata;
-sub get_dist;
+sub get_git_branch_and_tags;
+sub get_git_package;
+sub get_target;
 sub update_spec;
 sub update_changelog;
 sub update_tag;
@@ -145,21 +146,17 @@
 my $opt_wait;
 my $opt_save_temp;
 my $opt_try;
-my $opt_test;
 my $opt_delay = 30;
 my $opt_target;
-my $opt_package;
 my $opt_spec;
 my $opt_obs;
 
 GetOptions(
-  'sr'          => \$opt_sr,
+  'sr=s'        => \$opt_sr,
   'wait-for-ok' => \$opt_wait,
   'delay=i'     => \$opt_delay,
   'try'         => \$opt_try,
-  'test'        => \$opt_test,
   'target=s'    => \$opt_target,
-  'package=s'   => \$opt_package,
   'spec=s'      => \$opt_spec,
   'obs=s'       => \$opt_obs,
   'save-temp'   => \$opt_save_temp,
@@ -170,31 +167,22 @@
 my $tmp = Tmp::new($opt_save_temp);   
 
 my $tmpdir = $tmp->dir('package');
-my $tmpdir2 = $tmp->dir('testpackage');
 
 $ENV{PATH} = "$ENV{HOME}/bin:/usr/bin:/bin:/usr/sbin:/sbin";
 
 get_rc;
-
-if($opt_package) {
-  $config->{package} = $opt_package;
-}
-else {
-  get_gitdata;
-}
-
-usage 1 unless $config->{package};
-
-get_dist;
+get_target;
 
 exit do_sr if $opt_sr;
 
+get_git_branch_and_tags;
+
 chomp($config->{version} = `git2log --version`);
 die "no version info\n" if $config->{version} eq "";
 
 my @s = map { s#^[^/]*/##; $_ } glob("package/*");
 @s = grep { !/\.changes$/ } @s;
-die "no source files\n" if !@s;
+die "no source files; maybe run 'make archive'\n" if !@s;
 
 $config->{archive} = "$config->{package}-$config->{version}.tar";
 for (sort @s) {
@@ -210,10 +198,7 @@
 print "   GIT Branch: $config->{branch}\n";
 print "    Spec File: $opt_spec\n" if $opt_spec;
 print "  OBS Sources: $opt_obs\n" if $opt_obs;
-print "         Dist: $config->{dist}\n";
 print "      Project: $config->{prj}\n";
-print " Test Project: $config->{test}\n" if $config->{test};
-print "    Submit To: $config->{sr}\n";
 print "   Maintainer: $config->{email}\n";
 print "           BS: $config->{bs}\n";
 print "      TMP Dir: $tmpdir\n";
@@ -222,14 +207,6 @@
 system "cd $tmpdir ; osc -A https://$config->{bs} co -c 
$config->{prj}/$config->{package} >/dev/null";
 system "ls -og $tmpdir/$config->{package} | tail -n +2";
 
-if($config->{test}) {
-  print "Checking out $config->{test}/$config->{package}...\n";
-  if(system "cd $tmpdir2 ; osc -A https://$config->{bs} co -c 
$config->{test}/$config->{package} >/dev/null") {
-    die "missing test project $config->{test}/$config->{package}\n"
-  }
-  # system "ls -og $tmpdir2/$config->{package} | tail -n +2";
-}
-
 my @specs = map { s#.*/##; s#\.spec$##; $_ } 
glob("$tmpdir/$config->{package}/*.spec");
 if(@specs) {
   $config->{spec_name} = $specs[0];
@@ -314,24 +291,12 @@
 }
 
 # create new tag if needed
-update_tag if !$config->{test};
+update_tag;
 
-# updating bs project
-if($config->{test}) {
-  system "rm -f $tmpdir2/$config->{package}/*";
-  system "cp -a $tmpdir/$config->{package}/* $tmpdir2/$config->{package}/";
-
-  system "cd $tmpdir2/$config->{package} ; osc -A https://$config->{bs} 
addremove";
-  print "Submitting changes to $config->{test}/$config->{package}...\n";
-  system "cd $tmpdir2/$config->{package} ; osc -A https://$config->{bs} ci -m 
'- release $config->{version}'" if !$opt_try;
-  system "ls -og $tmpdir2/$config->{package} | tail -n +2";
-}
-else {
-  system "cd $tmpdir/$config->{package} ; osc -A https://$config->{bs} 
addremove";
-  print "Submitting changes to $config->{prj}/$config->{package}...\n";
-  system "cd $tmpdir/$config->{package} ; osc -A https://$config->{bs} ci -m 
'- release $config->{version}'" if !$opt_try;
-  system "ls -og $tmpdir/$config->{package} | tail -n +2";
-}
+system "cd $tmpdir/$config->{package} ; osc -A https://$config->{bs} 
addremove";
+print "Submitting changes to $config->{prj}/$config->{package}...\n";
+system "cd $tmpdir/$config->{package} ; osc -A https://$config->{bs} ci -m '- 
release $config->{version}'" if !$opt_try;
+system "ls -og $tmpdir/$config->{package} | tail -n +2";
 
 
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -347,23 +312,25 @@
 
 General options:
 
-  --target TARGET           Choose config from section TARGET in config file.
+  --target TARGET           Submit to TARGET.
+                            TARGET has the form BS://PROJECT[/PACKAGE], where:
+                            BS is the section name of the open build service 
api server,
+                            as specified in .tobsrc,
+                            PROJECT ist the project name,
+                            PACKAGE is the (optional) package name - in case 
it does not
+                            match the git project name.
   --spec FILE               Use FILE as spec file template instead of the spec 
file from
                             the build service project.
   --obs DIR                 Commit everything in DIR to OBS. Note that 
*.changes is still
                             automatically created.
   --try                     Don\'t actually do anything.
-  --test                    Submit to test project. A test project is an 
alternative
-                            project defined in .tobsrc. Sources are taken from 
the regular
-                            project but the new code is submitted to the test 
project.
-
   --version                 Show tobs version.
   --save-temp               Keep temporary files.
   --help                    Write this help text.
 
 Create submit request:
 
-  --sr                      Create submit request from devel project to target 
project.
+  --sr BS://PROJECT         Create submit request.
   --wait-for-ok             Wait until package has built ok on at least one 
architecture
                             in devel project.
   --delay N                 Wait N seconds between polling for build results 
(default: 30).
@@ -381,19 +348,19 @@
 
   Typical .ini style with entries in key=value form and section names in 
brackets ('[]').
 
-  Section names are arbitrary but can be thought of as target distribution.
+  Section names are used for the BS part in the TARGET specification.
   See README for some config entry examples.
 
 Examples:
 
-  # submit from current git dir to devel project
-  tobs
+  # submit from current git dir to foo:bar:devel project
+  tobs --target obs://foo:bar:devel
 
-  # prepare everything but don't actually submit anything
-  tobs --try
+  # the same, but don't actually submit the package
+  tobs --try --target obs://foo:bar:devel
 
-  # create submit request from devel project to target project
-  tobs --sr
+  # create submit request from devel project foo:bar:devel to openSUSE:Factory
+  tobs --target obs://foo:bar:devel --sr obs://openSUSE:Factory
 
 = = = = = = = =
 
@@ -405,27 +372,36 @@
 sub get_rc
 {
   my $sec;
-  my @sections;
 
   if(open my $f, "$ENV{HOME}/.tobsrc") {
     while(<$f>) {
       if(/^\s*\[(\S+)\]/) {
-        push @sections, $sec = { dist => $1 };
+        $sec = {};
+        $config->{rc}{$1} = $sec;
         next;
       }
 
-      $sec->{$1} = $2 if /^\s*(\S+)\s*=\s*(\S+)/;
+      next unless $sec;
+
+      if(/^\s*(\S+)\s*=\s*(\S+)/) {
+        my $key = $1;
+        my $val = $2;
+        if($key =~ /^(\S+)\[(\S+)\]$/) {
+          $sec->{$1}{$2} = $val;
+        }
+        else {
+          $sec->{$key} = $val;
+        }
+      }
     }
 
     close $f;
   }
-
-  $config->{rc} = \@sections;
 }
 
 
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_gitdata
+sub get_git_branch_and_tags
 {
   die "no git repository found\n" unless -d '.git';
 
@@ -437,6 +413,21 @@
 
   $config->{branch} = $branch;
 
+  if(open my $p, "git tag 2>/dev/null |") {
+    while(<$p>) {
+      s/\/?\s*$//;
+      $config->{tags}{$_} = 1 if $_ ne "";
+    }
+    close $p;
+  }
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+sub get_git_package
+{
+  die "no git repository found\n" unless -d '.git';
+
   my $pack = `git config --get remote.origin.url 2>/dev/null`;
 
   if($pack =~ m#([^/.]+)\.git\s*$#) {
@@ -447,55 +438,43 @@
   }
 
   $config->{package} = $pack if $pack ne "";
-
-  if(open my $p, "git tag 2>/dev/null |") {
-    while(<$p>) {
-      s/\/?\s*$//;
-      $config->{tags}{$_} = 1 if $_ ne "";
-    }
-    close $p;
-  }
 }
 
 
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_dist
+sub get_target
 {
-  my $dist;
+  die "target spec missing; use --target option\n" if !$opt_target;
 
-  for (@{$config->{rc}}) {
-    next if $opt_target && $_->{dist} ne $opt_target;
-    if($_->{branch} eq $config->{branch} || $opt_target) {
-      # when git repo  and package name differ...
-      if($_->{package} ne "" && $_->{gitname} eq $config->{package}) {
-        $config->{package} = $_->{package};
-        $dist = $_;
-        last;
-      }
-      elsif($_->{package} eq $config->{package}) {
-        $dist = $_;
-        last;
-      }
-      $dist = $_, last if !$_->{package};
-    }
+  my $bs_name;
+
+  $config->{package} = $2 if $opt_sr =~ s#([^/])/([^/]+)$#$1#;
+  $config->{package} = $2 if $opt_target =~ s#([^/])/([^/]+)$#$1#;
+
+  $opt_sr = $config->{rc}{aliases}{$opt_sr} if $config->{rc}{aliases}{$opt_sr};
+  $opt_target = $config->{rc}{aliases}{$opt_target} if 
$config->{rc}{aliases}{$opt_target};
+
+  if($opt_target =~ m#^([^:]+)://([^/]+)$#) {
+    $bs_name = $1;
+    $config->{bs} = $config->{rc}{$bs_name}{api};
+    $config->{prj} = $2;
+  }
+  else {
+    die "invalid target spec: $opt_target\n";
   }
 
-  die "no config for " . ($opt_target ? $opt_target : $config->{branch}) . 
"\n" unless $dist;
+  if($opt_sr =~ m#^([^:]+)://([^/]+)$#) {
+    $config->{sr}{api} = $config->{rc}{$1}{api};
+    my $pref = $config->{rc}{$1}{prefix}{$bs_name};
+    $config->{sr}{prefix} = "$pref:" if defined $pref;
+    $config->{sr}{prj} = $2;
+  }
 
-  $config->{dist} = $dist->{dist};
-  $config->{prj} = $dist->{prj};
-  $config->{bs} = $dist->{bs};
-  $config->{bs_sr} = $dist->{bs_sr};
-  if($opt_test) {
-    if($dist->{test}) {
-      $config->{test} = $dist->{test};
-    }
-    else {
-      die "no test project defined for $config->{package} in 
$config->{dist}\n";
-    }
+  get_git_package if !$config->{package};
+
+  if(!$config->{prj} || !$config->{package} || !$config->{bs}) {
+    die "incomplete config\n  project = $config->{prj}\n  package = 
$config->{package}\n  api = $config->{bs}\n";
   }
-  $config->{sr} = $dist->{sr};
-  $config->{sr} .= "/$config->{package}" if $config->{sr} && $config->{sr} !~ 
m#/#;
 
   if($ENV{USER_NAME}) {
     $config->{email} = $ENV{USER_NAME};
@@ -514,7 +493,6 @@
   }
 
   $config->{email} = (getpwuid $<)[0] if !$config->{email};
-
   $config->{email} .= "\@suse.com" if $config->{email} !~ /\@/;
 }
 
@@ -602,11 +580,6 @@
       }
       else {
         $setup = 1;
-        my $i = 1;
-        for my $x (keys %{$config->{sources}}) {
-          $_ .= "%setup -T -D -a $i\n";
-          $i++;
-        }
       }
     }
   }
@@ -684,29 +657,19 @@
 #
 sub do_sr
 {
-  my $bs = $config->{bs};
-  my $bs_prefix;
-
-  if($config->{bs_sr}) {
-    ($bs, $bs_prefix) = split /,/, $config->{bs_sr};
-  }
+  my $sr = $config->{sr};
 
   print "      Package: $config->{package}\n";
-  print "         Dist: $config->{dist}\n";
-  print "      Project: $bs_prefix$config->{prj}\n";
-  print " Test Project: $bs_prefix$config->{test}\n" if $config->{test};
-  print "    Submit To: $config->{sr}\n";
+  print "      Project: $sr->{prefix}$config->{prj}\n";
+  print "    Submit To: $sr->{prj}\n";
   print "   Maintainer: $config->{email}\n";
-  print "           BS: $bs\n";
-
-  my $err = 0;
+  print "           BS: $sr->{api}\n";
 
-  if($config->{test}) {
-    print "\n===  No submit requests from test projects!  ===\n";
-    return $err;
+  if($sr->{api} ne $config->{bs} && !$sr->{prefix}) {
+    die "submitting from $config->{bs} to $sr->{api} not possible\n";
   }
 
-  my @s = split '/', $config->{sr};
+  my $err = 0;
 
   if($opt_wait) {
     my $ok;
@@ -714,12 +677,12 @@
     my $building;
     my $delay = $opt_delay;
 
-    print "Waiting for build results of $config->{prj}/$s[1]...\n";
+    print "Waiting for build results of 
$config->{prj}/$config->{package}...\n";
     $| = 1;
 
     do {
       sleep $delay;
-      if(open my $p, "osc -A https://$bs r --csv $bs_prefix$config->{prj} 
$s[1] |") {
+      if(open my $p, "osc -A https://$sr->{api} r --csv 
$sr->{prefix}$config->{prj} $config->{package} |") {
         # sample line:
         #
         # openSUSE_Factory|x86_64|unpublished|False|succeeded|
@@ -779,19 +742,13 @@
     print "Build ok\n";
   }
 
-  if(!$config->{sr}) {
-    print "No submit request created\n";
-
-    return $err;
-  }
-
-  print "Creating submit request to $config->{sr}\n";
+  print "Creating submit request to $sr->{prj}\n";
 
   if(!$opt_try) {
     my $sr_resp = $tmp->file();
     my $user = $config->{email};
     $user =~ s/\@.*$//;
-    system "echo y | osc -A https://$bs sr -m 'submitted by $user via jenkins' 
--yes --nodevelproject $bs_prefix$config->{prj} $s[1] $s[0] >$sr_resp 2>&1";
+    system "echo y | osc -A https://$sr->{api} sr -m 'submitted by $user via 
jenkins' --yes --nodevelproject $sr->{prefix}$config->{prj} $config->{package} 
$sr->{prj} >$sr_resp 2>&1";
     $err = $? >> 8;
 
     my $resp_msg;

Reply via email to