Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package obs-service-cargo_vendor for 
openSUSE:Factory checked in at 2022-04-06 21:51:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/obs-service-cargo_vendor (Old)
 and      /work/SRC/openSUSE:Factory/.obs-service-cargo_vendor.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "obs-service-cargo_vendor"

Wed Apr  6 21:51:44 2022 rev:6 rq:967173 version:0.4.3~2

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/obs-service-cargo_vendor/obs-service-cargo_vendor.changes
        2022-03-11 11:48:11.842814896 +0100
+++ 
/work/SRC/openSUSE:Factory/.obs-service-cargo_vendor.new.1900/obs-service-cargo_vendor.changes
      2022-04-06 21:52:12.863072146 +0200
@@ -1,0 +2,6 @@
+Wed Apr 06 05:26:52 UTC 2022 - wbr...@suse.de
+
+- Update to version 0.4.3~git2.08145c7:
+  * Update to account for srctar and tag
+
+-------------------------------------------------------------------

Old:
----
  obs-service-cargo_vendor-0.4.3~git0.afec7bc.tar.gz

New:
----
  obs-service-cargo_vendor-0.4.3~2.tar.gz

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

Other differences:
------------------
++++++ obs-service-cargo_vendor.spec ++++++
--- /var/tmp/diff_new_pack.AqMyIb/_old  2022-04-06 21:52:13.995059229 +0200
+++ /var/tmp/diff_new_pack.AqMyIb/_new  2022-04-06 21:52:13.999059183 +0200
@@ -22,7 +22,7 @@
 License:        GPL-2.0-or-later
 Group:          Development/Tools/Building
 URL:            https://github.com/openSUSE/obs-service-%{service}
-Version:        0.4.3~git0.afec7bc
+Version:        0.4.3~2
 Release:        0
 Source:         %{name}-%{version}.tar.gz
 BuildRequires:  python3

++++++ _service ++++++
--- /var/tmp/diff_new_pack.AqMyIb/_old  2022-04-06 21:52:14.027058864 +0200
+++ /var/tmp/diff_new_pack.AqMyIb/_new  2022-04-06 21:52:14.027058864 +0200
@@ -1,9 +1,9 @@
 <services>
   <service mode="disabled" name="obs_scm">
     <param 
name="url">https://github.com/openSUSE/obs-service-cargo_vendor.git</param>
-    <param name="versionformat">@PARENT_TAG@~git@TAG_OFFSET@.%h</param>
+    <param name="versionformat">@PARENT_TAG@~@TAG_OFFSET@</param>
     <param name="scm">git</param>
-    <param name="revision">v0.4.3</param>
+    <param name="revision">master</param>
     <param name="match-tag">v*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.AqMyIb/_old  2022-04-06 21:52:14.047058635 +0200
+++ /var/tmp/diff_new_pack.AqMyIb/_new  2022-04-06 21:52:14.047058635 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/openSUSE/obs-service-cargo_vendor.git</param>
-              <param 
name="changesrevision">afec7bcacce9cfc694abdc227e835dd051ac9a2c</param></service></servicedata>
+              <param 
name="changesrevision">08145c7fc1f7cf14e4ba3d97e2aded6476d451e4</param></service></servicedata>
 (No newline at EOF)
 

++++++ obs-service-cargo_vendor-0.4.3~git0.afec7bc.tar.gz -> 
obs-service-cargo_vendor-0.4.3~2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/README.md 
new/obs-service-cargo_vendor-0.4.3~2/README.md
--- old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/README.md   2021-07-30 
04:14:33.000000000 +0200
+++ new/obs-service-cargo_vendor-0.4.3~2/README.md      2022-04-06 
07:19:39.000000000 +0200
@@ -32,6 +32,7 @@
   </service>
   <service name="cargo_vendor" mode="disabled">
     <param name="srcdir">projectname</param>
+    <param name="update">true</param>
   </service>
 </services>
 ```
@@ -107,11 +108,15 @@
 ## Options
 
 - `<param name="srcdir">projectname</param>`
+- `<param name="srctar">name-of-source.tar</param>`
 
 The location to search for the Cargo.toml which we will vendor from. Generally 
this is your project
 name from the SCM checkout, or the extracted archive top dir, but it may 
differ depending on your
 configuration.
 
+You can alternately specify srctar, which we will unpack into a temp location 
and perform the vendor
+instead. This removes your need to rely on `obs_scm` or similar
+
 - `<param name="compression">xz</param>`
 
 The compression to use for the `vendor.tar`. If the option is not supplied it 
will default to `xz`.
@@ -122,10 +127,11 @@
 If present, cargo update will be run before vendoring to ensure that the 
latest version of compatible
 dependencies is used.
 
-- `<param name="strategy">vendor</param>`
+- `<param name="tag">tagname</param>`
 
-The default here is `vendor` which will use `cargo vendor` to fetch the crate 
dependencies. There
-are currently no alternatives to `vendor`.
+In some rare case, you may wish to annotate your `vendor.tar` and 
`cargo_config` with a unique
+tag. Generally this happens if you are needing to create multiple vendor tars. 
When you specify
+`tag` the vendor routine will create `vendor-{tag}.tar` and 
`cargo_config_{tag}` instead.
 
 #### Example
 
@@ -135,11 +141,20 @@
     ...
   </service>
   <service name="cargo_vendor" mode="disabled">
-    <param name="strategy">vendor</param>
     <param name="srcdir">projectname</param>
     <param name="compression">xz</param>
     <param name="update">true</param>
   </service>
+</services>
+```
+
+```
+<services>
+  <service name="cargo_vendor" mode="disabled">
+    <param name="srctar">projectname.tar.xz</param>
+    <param name="compression">xz</param>
+    <param name="update">true</param>
+  </service>
 </services>
 ```
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/cargo_vendor 
new/obs-service-cargo_vendor-0.4.3~2/cargo_vendor
--- old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/cargo_vendor        
2021-07-30 04:14:33.000000000 +0200
+++ new/obs-service-cargo_vendor-0.4.3~2/cargo_vendor   2022-04-06 
07:19:39.000000000 +0200
@@ -34,6 +34,7 @@
 import argparse
 import re
 import tarfile
+import tempfile
 import os
 import shutil
 
@@ -53,56 +54,21 @@
 
 log = logging.getLogger(service_name)
 
-parser = argparse.ArgumentParser(
-    description=description, 
formatter_class=argparse.RawDescriptionHelpFormatter
-)
-parser.add_argument("--strategy", default="vendor")
-parser.add_argument("--srcdir")
-parser.add_argument("--outdir")
-parser.add_argument("--update", default=False)
-parser.add_argument("--compression", default="xz")
-args = parser.parse_args()
-
-outdir = args.outdir
-srcdir = args.srcdir
-# Hack - obs always emits an arg to this so we can't use 
store_true/store_false.
-update = args.update
-if update == "false" or update == '0':
-    update = False
-compression = args.compression
 
 vendor_example = """
-Your spec file should be modified per the following example:
+Examples of how to modify your spec file to use vendored libraries can be 
found online:
 
----BEGIN---
-%global rustflags '-Clink-arg=-Wl,-z,relro,-z,now'
-
-Source1:    vendor.tar.xz
-Source2:    cargo_config
-
-%prep
-%setup -qa1
-mkdir .cargo
-cp %{SOURCE2} .cargo/config
-
-%build
-RUSTFLAGS=%{rustflags} cargo build --release
-
-%install
-RUSTFLAGS=%{rustflags} cargo install --root=%{buildroot}%{_prefix} --path .
----END---
+https://en.opensuse.org/Packaging_Rust_Software#Creating_the_Package
 
 WARNING: To avoid cargo install rebuilding the binary in the install stage
          all environment variables must be the same as in the build stage.
 """
 
-vendor_tarname = f"vendor.tar.{compression}"
-
 
 def find_file(path, filename):
     for root, dirs, files in os.walk(path):
         if filename in files:
-            print(os.path.join(root, filename))
+            log.debug(os.path.join(root, filename))
             return os.path.join(root, filename)
 
 
@@ -120,7 +86,7 @@
         return None
 
 
-def cargo_vendor(appDirectory, argsList=[]):
+def cargo_vendor(appDirectory, update, outdir, tag, argsList=[]):
     if update:
         log.info("Updating deps before vendor")
         run_cargo(appDirectory, "update")
@@ -128,52 +94,95 @@
     output = run_cargo(appDirectory, "vendor", argsList + ["--", "vendor"])
     if output:
         log.info(vendor_example)
-        config_file_path = os.path.join(outdir, "cargo_config")
+        if tag:
+            config_file_path = os.path.join(outdir, f"cargo_config_{tag}")
+        else:
+            config_file_path = os.path.join(outdir, "cargo_config")
         config_file = open(config_file_path, 'w')
         config_file.write(output)
         config_file.close()
     # End cargo_vendor.
 
 
-def main():
-    log.info(f"Running OBS Source Service: {service_name}")
-
-    log.info(f"Searching for Cargo.toml in {srcdir}")
-    log.info(f"Current work dir {os.getcwd()}")
-
-    cargo_toml_path = find_file(srcdir, "Cargo.toml")
-    if cargo_toml_path:
-        app_dir = os.path.dirname(cargo_toml_path)
-        log.info(f"Detected Rust app directory: {app_dir}")
-    else:
-        log.error(f"No Rust app using Cargo.toml found under {outdir}")
-        exit(1)
+def do_cargo_vendor(srcdir, srctar, outdir, update, compression, tag):
+    if srcdir and srctar:
+        log.error("I'm confused - can't work with both a srctar and srcdir!")
+        return False
+
+    with tempfile.TemporaryDirectory() as tmpdirname:
+        if srctar:
+            log.debug(f" Unpacking {srctar}")
+            # Setup the tar.
+            log.debug(f" setting up sources into {tmpdirname}")
+            with tarfile.open(f"{srctar}", "r:*") as tar:
+                tar.extractall(path=tmpdirname)
+            lsrcdir = tmpdirname
+        else:
+            log.debug(f" Copying {srcdir}")
+            (_, dirname) = os.path.split(srcdir)
+            dirpath = os.path.join(tmpdirname, dirname)
+            log.debug(f" copying sources into {dirpath}")
+            lsrcdir = shutil.copytree(srcdir, dirpath, dirs_exist_ok=True)
+
+        log.info(f"Current work dir {os.getcwd()}")
+        log.info(f"Searching for Cargo.toml in {lsrcdir}")
+
+        cargo_toml_path = find_file(lsrcdir, "Cargo.toml")
+        if cargo_toml_path:
+            app_dir = os.path.dirname(cargo_toml_path)
+            log.info(f"Detected Rust app directory: {app_dir}")
+        else:
+            log.error(f"No Rust app using Cargo.toml found under {outdir}")
+            return False
 
-    if args.strategy == "vendor":
-        cargo_vendor(appDirectory=app_dir)
+        cargo_vendor(appDirectory=app_dir, update=update, outdir=outdir, 
tag=tag)
         vendor_dir = os.path.join(app_dir, "vendor")
         vendor_lock = os.path.join(app_dir, "Cargo.lock")
-        vendor_tarfile = os.path.join(outdir, vendor_tarname)
+        if tag:
+            vendor_tarfile = os.path.join(outdir, 
f"vendor-{tag}.tar.{compression}")
+        else:
+            vendor_tarfile = os.path.join(outdir, f"vendor.tar.{compression}")
         log.info("Starting compression ...")
         with tarfile.open(vendor_tarfile, f"w:{compression}") as tar:
             tar.add(vendor_dir, arcname=("vendor"))
             if update:
                 tar.add(vendor_lock, arcname=("Cargo.lock"))
-        # Complete, so cleanup the vendor folder. This is needed as obs_scm + 
compress
-        # will on subsequent runs, put the vendor folder in the mail tar AND 
into
-        # our vendor.tar.xz.
-        #
-        # This is not a greater cost, as cargo vendor will always download 
anyway.
-        log.debug(f"Cleaning up {vendor_dir} ...")
-        shutil.rmtree(vendor_dir)
-        # Remove the updated cargo.lock so that we don't conflict with obs_scm 
if run again.
-        if update:
-            log.debug(f"Cleaning up {vendor_lock} ...")
-            os.remove(vendor_lock)
+        # No longer need cleanup since we used a temp location.
+    log.info(f"Success")
+    return True
+
+
+def main():
+    log.info(f"Running OBS Source Service: {service_name}")
+
+    parser = argparse.ArgumentParser(
+        description=description, 
formatter_class=argparse.RawDescriptionHelpFormatter
+    )
+    # Legacy argument, no longer used.
+    parser.add_argument("--strategy", default="vendor")
+
+    # Where to find unpacked sources.
+    parser.add_argument("--srcdir", default=None)
+    # Where to find packed sources.
+    parser.add_argument("--srctar", default=None)
+    # Where to put the vendor.tar and cargo_config
+    parser.add_argument("--outdir", default=None)
+    parser.add_argument("--update", default=False)
+    parser.add_argument("--tag", default=None)
+    parser.add_argument("--compression", default="xz")
+    args = parser.parse_args()
+
+    # Hack - obs always emits an arg to this so we can't use 
store_true/store_false.
+    update = args.update
+    if args.update == "false" or update == '0':
+        update = False
     else:
-        log.error(f"Not a valid strategy : \"{args.strategy}\"")
+        update = True
+
+    log.debug("%s" % args)
+
+    if not do_cargo_vendor(args.srcdir, args.srctar, args.outdir, update, 
args.compression, args.tag):
         exit(1)
-    log.info(f"Success")
 
 
 if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/do_bulk_update.py 
new/obs-service-cargo_vendor-0.4.3~2/do_bulk_update.py
--- old/obs-service-cargo_vendor-0.4.3~git0.afec7bc/do_bulk_update.py   
1970-01-01 01:00:00.000000000 +0100
+++ new/obs-service-cargo_vendor-0.4.3~2/do_bulk_update.py      2022-04-06 
07:19:39.000000000 +0200
@@ -0,0 +1,132 @@
+#!/usr/bin/python3
+
+import subprocess
+import argparse
+import os
+import xml.etree.ElementTree as ET
+
+# Import Crimes
+import importlib.machinery
+import importlib.util
+loader = importlib.machinery.SourceFileLoader( 'cargo_vendor_module', 
'./cargo_vendor' )
+spec = importlib.util.spec_from_loader( 'cargo_vendor_module', loader )
+cargo_vendor_module = importlib.util.module_from_spec( spec )
+loader.exec_module( cargo_vendor_module )
+
+
+
+def checkout_or_update(pkgname, basepath):
+    pkgpath = f"{basepath}:{pkgname}"
+    try:
+        if os.path.exists(pkgpath):
+            print(f"osc revert {pkgpath}")
+            # Revert/cleanup if required.
+            out = subprocess.check_output(["osc", "revert", "."], 
cwd=f"{pkgpath}")
+            print(f"osc clean {pkgpath}")
+            out = subprocess.check_output(["osc", "clean", "."], 
cwd=f"{pkgpath}")
+            print(f"osc up {pkgpath}")
+            out = subprocess.check_output(["osc", "up", f"{pkgpath}"])
+        else:
+            print(f"osc bco {pkgname}")
+            out = subprocess.check_output(["osc", "bco", f"{pkgname}"])
+    except subprocess.CalledProcessError as e:
+        print(f"Failed to checkout or update {pkgname}")
+        print(e.stdout)
+        raise e
+    print(f"done")
+    return pkgpath
+
+
+def does_have_cargo_vendor(pkgpath):
+    service = f"{pkgpath}/_service"
+    has_vendor_update = False
+    srctar = None
+    srcdir = None
+    compression = None
+
+    if os.path.exists(service):
+        tree = ET.parse(service)
+        root_node = tree.getroot()
+        for tag in root_node.findall('service'):
+            if tag.attrib['name'] == 'cargo_vendor':
+                for attr in tag:
+                    if attr.attrib['name'] == 'update' and attr.text == 'true':
+                        has_vendor_update = True
+                    if attr.attrib['name'] == 'srctar':
+                        srctar = attr.text
+                    if attr.attrib['name'] == 'srcdir':
+                        srcdir = attr.text
+                    if attr.attrib['name'] == 'compression':
+                        compression = attr.text
+    return (has_vendor_update, srctar, srcdir, compression)
+
+def attempt_update(pkgpath, message):
+    print(f"Attempting update for {pkgpath}")
+
+    (has_vendor, srctar, srcdir, compression) = does_have_cargo_vendor(pkgpath)
+
+    print(f"has_vendor: {has_vendor}, srctar: {srctar}, srcdir: {srcdir}")
+
+    if not has_vendor:
+        print(f"ERROR ?????? : {pkgpath} is not setup for cargo vendor!")
+        return
+
+    if srcdir and srctar is None:
+        # We can use srcdir to have a guess what tar we need to use.
+        content = os.listdir(pkgpath)
+        maybe_src = [
+            x for x in content
+            if x.startswith(srcdir) and '.tar' in x and 'vendor' not in x and 
not x.endswith('.asc')
+        ]
+        if len(maybe_src) != 1:
+            print(f"ERROR ?????? : confused! Not sure what tar to use in 
{pkgpath} {maybe_src}")
+            return
+
+        srctar = maybe_src[0]
+
+    assert srctar
+
+    srctar = f"{pkgpath}/{srctar}"
+
+    print(f"Running vendor in {pkgpath} ...")
+    cargo_vendor_module.do_cargo_vendor(None, srctar, pkgpath, True, 
compression)
+
+    print(f"osc vc {pkgpath}")
+    out = subprocess.check_output(["osc", "vc", "-m", message], 
cwd=f"{pkgpath}")
+
+    print(f"osc ci {pkgpath}")
+    out = subprocess.check_output(["osc", "ci", "-m", message], 
cwd=f"{pkgpath}")
+
+    print(f"osc sr {pkgpath}")
+    out = subprocess.check_output(["osc", "sr", "-m", message], 
cwd=f"{pkgpath}")
+
+    print(f"Complete!")
+
+
+if __name__ == '__main__':
+    print("Started OBS cargo vendor bulk updater ...")
+
+    basepath = "home:firstyear:branches"
+
+    parser = argparse.ArgumentParser(
+        description="update OBS gooderer",
+        formatter_class=argparse.RawDescriptionHelpFormatter
+    )
+    parser.add_argument('packages', nargs='+')
+    parser.add_argument('message', nargs='?', default="Automatic update of 
vendored dependencies")
+    args = parser.parse_args()
+
+    print(args)
+
+    pkgpaths = [checkout_or_update(pkgname, basepath) for pkgname in 
args.packages]
+
+    for pkgpath in pkgpaths:
+        print("---")
+        attempt_update(pkgpath, args.message)
+
+    for pkgpath in pkgpaths:
+        print(f"echo {pkgpath}")
+        print(f"osc results {pkgpath}")
+
+    print("--- complete")
+

++++++ obs-service-cargo_vendor.obsinfo ++++++
--- /var/tmp/diff_new_pack.AqMyIb/_old  2022-04-06 21:52:14.103057996 +0200
+++ /var/tmp/diff_new_pack.AqMyIb/_new  2022-04-06 21:52:14.107057950 +0200
@@ -1,6 +1,5 @@
 name: obs-service-cargo_vendor
-version: 0.4.3~git0.afec7bc
-mtime: 1627611273
-commit: afec7bcacce9cfc694abdc227e835dd051ac9a2c
-
+version: 0.4.3~2
+mtime: 1649222379
+commit: 08145c7fc1f7cf14e4ba3d97e2aded6476d451e4
 

Reply via email to