Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package targetcli-fb for openSUSE:Factory 
checked in at 2026-10-21 21:00:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/targetcli-fb (Old)
 and      /work/SRC/openSUSE:Factory/.targetcli-fb.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "targetcli-fb"

Wed Oct 21 21:00:11 2026 rev:30 rq:1386748 version:3.0.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/targetcli-fb/targetcli-fb.changes        
2025-08-27 21:36:48.844030072 +0200
+++ /work/SRC/openSUSE:Factory/.targetcli-fb.new.2252680/targetcli-fb.changes   
2026-10-21 21:01:57.780257575 +0200
@@ -1,0 +2,10 @@
+Sun Oct 18 10:57:51 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 3.0.2:
+  * restoreconfig: no longer return success if the file
+    doesn't exist
+  * Allow user to control exclusive ownership for iblock
+  * Correct tab-completion for storage objects
+- Spec cleanup: drop obsolete Group tags
+
+-------------------------------------------------------------------

Old:
----
  targetcli-fb-3.0.1.tar.xz

New:
----
  targetcli-fb-3.0.2.tar.xz

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

Other differences:
------------------
++++++ targetcli-fb.spec ++++++
--- /var/tmp/diff_new_pack.cBQrTD/_old  2026-10-21 21:01:59.049310931 +0200
+++ /var/tmp/diff_new_pack.cBQrTD/_new  2026-10-21 21:01:59.051311015 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package targetcli-fb
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -22,11 +22,10 @@
 %bcond_with libalternatives
 %endif
 Name:           targetcli-fb
-Version:        3.0.1
+Version:        3.0.2
 Release:        0
 Summary:        A command shell for managing the Linux LIO kernel target
 License:        Apache-2.0
-Group:          System/Management
 URL:            https://github.com/open-iscsi/%{name}
 Source:         %{name}-%{version}.tar.xz
 Source1:        %{name}.service
@@ -41,6 +40,7 @@
 BuildRequires:  %{pythons}
 BuildRequires:  fdupes
 BuildRequires:  git
+BuildRequires:  pkgconfig
 BuildRequires:  python-rpm-macros
 BuildRequires:  pkgconfig(systemd)
 Requires:       python-configshell-fb
@@ -75,7 +75,6 @@
 
 %package -n %{name}-common
 Summary:        Common targetcli-fb subpackage for either flavor of Python
-Group:          System/Management
 Provides:       %{python_module targetcli-fb-common}
 
 %description -n %{name}-common
@@ -143,8 +142,8 @@
 %doc README.md THANKS
 %dir %{_sysconfdir}/target
 %dir %{_sysconfdir}/target/backup
-%doc %{_mandir}/man8/targetcli.8%{?ext_man}
-%doc %{_mandir}/man8/targetclid.8%{?ext_man}
+%{_mandir}/man8/targetcli.8%{?ext_man}
+%{_mandir}/man8/targetclid.8%{?ext_man}
 %{_unitdir}/targetcli.service
 %{_unitdir}/targetclid.service
 %{_unitdir}/targetclid.socket

++++++ _service ++++++
--- /var/tmp/diff_new_pack.cBQrTD/_old  2026-10-21 21:01:59.087312529 +0200
+++ /var/tmp/diff_new_pack.cBQrTD/_new  2026-10-21 21:01:59.091312697 +0200
@@ -8,7 +8,7 @@
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(\d*\.\d*\.)(\d*)</param>
     <param name="versionrewrite-replacement">\1\2</param>
-    <param name="revision">v3.0.1</param>
+    <param name="revision">v3.0.2</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ targetcli-fb-3.0.1.tar.xz -> targetcli-fb-3.0.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.fmf/version 
new/targetcli-fb-3.0.2/.fmf/version
--- old/targetcli-fb-3.0.1/.fmf/version 1970-01-01 01:00:00.000000000 +0100
+++ new/targetcli-fb-3.0.2/.fmf/version 2026-10-18 12:57:33.075877105 +0200
@@ -0,0 +1 @@
+1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/HEAD 
new/targetcli-fb-3.0.2/.git/HEAD
--- old/targetcli-fb-3.0.1/.git/HEAD    2025-02-25 09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.git/HEAD    2026-10-18 12:57:33.099879795 +0200
@@ -1 +1 @@
-2b3db3980327a9c12a43fd2108dcf00327523f9a
+24f0a33d15ada373404d08ee618d365c85592851
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/ORIG_HEAD 
new/targetcli-fb-3.0.2/.git/ORIG_HEAD
--- old/targetcli-fb-3.0.1/.git/ORIG_HEAD       2025-02-25 09:52:35.000000000 
+0100
+++ new/targetcli-fb-3.0.2/.git/ORIG_HEAD       1970-01-01 01:00:00.000000000 
+0100
@@ -1 +0,0 @@
-2b3db3980327a9c12a43fd2108dcf00327523f9a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/hooks/pre-commit.sample 
new/targetcli-fb-3.0.2/.git/hooks/pre-commit.sample
--- old/targetcli-fb-3.0.1/.git/hooks/pre-commit.sample 2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.git/hooks/pre-commit.sample 2026-10-18 
12:57:32.251784756 +0200
@@ -28,7 +28,7 @@
        # Note that the use of brackets around a tr range is ok here, (it's
        # even required, for portability to Solaris 10's /usr/bin/tr), since
        # the square bracket bytes happen to fall in the designated range.
-       test $(git diff --cached --name-only --diff-filter=A -z $against |
+       test $(git diff-index --cached --name-only --diff-filter=A -z $against |
          LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
 then
        cat <<\EOF
Binary files old/targetcli-fb-3.0.1/.git/index and 
new/targetcli-fb-3.0.2/.git/index differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/logs/HEAD 
new/targetcli-fb-3.0.2/.git/logs/HEAD
--- old/targetcli-fb-3.0.1/.git/logs/HEAD       2025-02-25 09:52:35.000000000 
+0100
+++ new/targetcli-fb-3.0.2/.git/logs/HEAD       2026-10-18 12:57:33.099879795 
+0200
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 
ec7f392196d1100ea48fa1fc93cedbb4b44109c3 Lee Duncan <[email protected]> 
1742611032 -0700       clone: from 
https://github.com/open-iscsi/targetcli-fb.git
-ec7f392196d1100ea48fa1fc93cedbb4b44109c3 
2b3db3980327a9c12a43fd2108dcf00327523f9a Lee Duncan <[email protected]> 
1742611032 -0700       checkout: moving from master to v3.0.1
+0000000000000000000000000000000000000000 
a2a26e283a906b2488bad51fc4af9dc0659a7633 Martin Pluskal <[email protected]> 
1792321053 +0200 clone: from https://github.com/open-iscsi/targetcli-fb.git
+a2a26e283a906b2488bad51fc4af9dc0659a7633 
24f0a33d15ada373404d08ee618d365c85592851 Martin Pluskal <[email protected]> 
1792321053 +0200 checkout: moving from master to v3.0.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/logs/refs/heads/master 
new/targetcli-fb-3.0.2/.git/logs/refs/heads/master
--- old/targetcli-fb-3.0.1/.git/logs/refs/heads/master  2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.git/logs/refs/heads/master  2026-10-18 
12:57:33.075877105 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
ec7f392196d1100ea48fa1fc93cedbb4b44109c3 Lee Duncan <[email protected]> 
1742611032 -0700       clone: from 
https://github.com/open-iscsi/targetcli-fb.git
+0000000000000000000000000000000000000000 
a2a26e283a906b2488bad51fc4af9dc0659a7633 Martin Pluskal <[email protected]> 
1792321053 +0200 clone: from https://github.com/open-iscsi/targetcli-fb.git
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/targetcli-fb-3.0.1/.git/logs/refs/remotes/origin/HEAD 
new/targetcli-fb-3.0.2/.git/logs/refs/remotes/origin/HEAD
--- old/targetcli-fb-3.0.1/.git/logs/refs/remotes/origin/HEAD   2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.git/logs/refs/remotes/origin/HEAD   2026-10-18 
12:57:33.071876657 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
ec7f392196d1100ea48fa1fc93cedbb4b44109c3 Lee Duncan <[email protected]> 
1742611032 -0700       clone: from 
https://github.com/open-iscsi/targetcli-fb.git
+0000000000000000000000000000000000000000 
a2a26e283a906b2488bad51fc4af9dc0659a7633 Martin Pluskal <[email protected]> 
1792321053 +0200 clone: from https://github.com/open-iscsi/targetcli-fb.git
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.idx
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.idx
 differ
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.pack
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.pack
 differ
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.rev
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-13cc024390e03223ec1b44296263efb15045386a.rev
 differ
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.idx
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.idx
 differ
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.pack
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.pack
 differ
Binary files 
old/targetcli-fb-3.0.1/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.rev
 and 
new/targetcli-fb-3.0.2/.git/objects/pack/pack-66b0b7fecf19042284943e3beb62b09e6790f0b8.rev
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/packed-refs 
new/targetcli-fb-3.0.2/.git/packed-refs
--- old/targetcli-fb-3.0.1/.git/packed-refs     2025-02-25 09:52:35.000000000 
+0100
+++ new/targetcli-fb-3.0.2/.git/packed-refs     2026-10-18 12:57:33.071876657 
+0200
@@ -1,7 +1,10 @@
 # pack-refs with: peeled fully-peeled sorted 
 4be9d9c8e98ae6605919aeee92348d6c0da4c59c refs/remotes/origin/add-usage
 b7a85ef8bcbd2c4337f17d86a3f0d3c3f4e2b364 refs/remotes/origin/fix-dir-del-issue
-ec7f392196d1100ea48fa1fc93cedbb4b44109c3 refs/remotes/origin/master
+137efd35d1101c2a5f12be16795631652eb829a4 refs/remotes/origin/gh-pages
+94c3a4407ba106daca2fc24c8c5900562c3a20f8 
refs/remotes/origin/lint-code-style-fix
+a2a26e283a906b2488bad51fc4af9dc0659a7633 refs/remotes/origin/master
+c70a7537840618b08190ea6d1834e9a2b9dd311c 
refs/remotes/origin/pre-commit-ci-update-config
 a7c313ce9810a0b178e0e8cfaf5ffc22d8868e30 refs/remotes/origin/upstream
 0c3685df8d5dfb8b5cca3b5b47d2c7a722010688 refs/remotes/origin/user-backstore-poc
 2b5d7bfa0fcb5f7c0cea2ae3e3425edacf67ff04 refs/remotes/origin/userback
@@ -123,3 +126,4 @@
 4d08771c0e6bf3cacba2ed3d3127dd10a86a7847 refs/tags/v2.1.fb49
 474edd5e68162415c72aa4e56850051b192b2437 refs/tags/v3.0.0
 2b3db3980327a9c12a43fd2108dcf00327523f9a refs/tags/v3.0.1
+24f0a33d15ada373404d08ee618d365c85592851 refs/tags/v3.0.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.git/refs/heads/master 
new/targetcli-fb-3.0.2/.git/refs/heads/master
--- old/targetcli-fb-3.0.1/.git/refs/heads/master       2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.git/refs/heads/master       2026-10-18 
12:57:33.075877105 +0200
@@ -1 +1 @@
-ec7f392196d1100ea48fa1fc93cedbb4b44109c3
+a2a26e283a906b2488bad51fc4af9dc0659a7633
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.github/workflows/codeql.yml 
new/targetcli-fb-3.0.2/.github/workflows/codeql.yml
--- old/targetcli-fb-3.0.1/.github/workflows/codeql.yml 1970-01-01 
01:00:00.000000000 +0100
+++ new/targetcli-fb-3.0.2/.github/workflows/codeql.yml 2026-10-18 
12:57:33.079877553 +0200
@@ -0,0 +1,39 @@
+name: "CodeQL"
+
+on:
+  push:
+    branches: [ "master" ]
+  pull_request:
+    branches: [ "master" ]
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ubuntu-latest
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+
+    strategy:
+      fail-fast: false
+      matrix:
+        language: [ 'python' ]
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v4
+
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v3
+      with:
+        languages: ${{ matrix.language }}
+        queries: security-and-quality
+
+    - name: Autobuild
+      uses: github/codeql-action/autobuild@v3
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v3
+      with:
+        category: "/language:${{matrix.language}}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.github/workflows/pre-commit.yml 
new/targetcli-fb-3.0.2/.github/workflows/pre-commit.yml
--- old/targetcli-fb-3.0.1/.github/workflows/pre-commit.yml     2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.github/workflows/pre-commit.yml     1970-01-01 
01:00:00.000000000 +0100
@@ -1,14 +0,0 @@
-name: pre-commit
-
-on:
-  pull_request:
-  push:
-    branches: [master]
-
-jobs:
-  pre-commit:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v4
-    - uses: actions/setup-python@v5
-    - uses: pre-commit/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.packit.yaml 
new/targetcli-fb-3.0.2/.packit.yaml
--- old/targetcli-fb-3.0.1/.packit.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/targetcli-fb-3.0.2/.packit.yaml 2026-10-18 12:57:33.079877553 +0200
@@ -0,0 +1,44 @@
+---
+# Basic configuration for Packit
+# See documentation: https://packit.dev/docs/configuration/
+
+specfile_path: python-targetcli-fb.spec
+
+upstream_package_name: targetcli-fb
+# In Fedora, Python packages are prefixed with 'python-'
+downstream_package_name: python3-targetcli
+
+# Use hatch to create the source archive
+actions:
+  create-archive:
+    - hatch build -t sdist
+    - bash -c "ls -1t ./dist/*.tar.gz | head -n 1"
+
+srpm_build_deps:
+  - python3-devel
+  - python3-pip
+  - hatch
+  - python3-hatchling
+  - python3-hatch-vcs
+
+jobs:
+  # Test PRs in COPR
+  - job: copr_build
+    trigger: pull_request
+    targets:
+      - fedora-latest-stable
+      - epel-9
+
+  # Run tests
+  - job: tests
+    trigger: pull_request
+    targets:
+      - fedora-latest-stable
+      - epel-9
+
+  # Sync with Fedora when a new release is created
+  - job: propose_downstream
+    trigger: release
+    dist_git_branches:
+      - fedora-all
+      - epel-9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/.pre-commit-config.yaml 
new/targetcli-fb-3.0.2/.pre-commit-config.yaml
--- old/targetcli-fb-3.0.1/.pre-commit-config.yaml      2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/.pre-commit-config.yaml      2026-10-18 
12:57:33.079877553 +0200
@@ -1,12 +1,12 @@
 repos:
-  - repo: https://github.com/charliermarsh/ruff-pre-commit
-    rev: v0.4.2
+  - repo: https://github.com/astral-sh/ruff-pre-commit
+    rev: v0.14.10
     hooks:
       - id: ruff
         args: [--fix]
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.6.0
+    rev: v6.0.0
     hooks:
       - id: check-case-conflict
       - id: check-ast
@@ -21,3 +21,14 @@
       - id: end-of-file-fixer
       - id: trailing-whitespace
         args: [--markdown-linebreak-ext=md]
+
+  - repo: https://github.com/packit/pre-commit-hooks
+    rev: v1.3.0
+    hooks:
+      - id: validate-config
+
+ci:
+  autofix_commit_msg: |
+    Auto fixes from pre-commit.com hooks
+  autofix_prs: false
+  autoupdate_schedule: monthly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/ci-tests/sts.fmf 
new/targetcli-fb-3.0.2/ci-tests/sts.fmf
--- old/targetcli-fb-3.0.1/ci-tests/sts.fmf     1970-01-01 01:00:00.000000000 
+0100
+++ new/targetcli-fb-3.0.2/ci-tests/sts.fmf     2026-10-18 12:57:33.079877553 
+0200
@@ -0,0 +1,4 @@
+plan:
+  import:
+    url: https://gitlab.com/rh-kernel-stqe/sts
+    name: /plans/lio/core
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/pyproject.toml 
new/targetcli-fb-3.0.2/pyproject.toml
--- old/targetcli-fb-3.0.1/pyproject.toml       2025-02-25 09:52:35.000000000 
+0100
+++ new/targetcli-fb-3.0.2/pyproject.toml       2026-10-18 12:57:33.079877553 
+0200
@@ -96,6 +96,7 @@
     "ARG002", "PLR6301",  # TODO Unused self, parameter in methods definitions
     "PLR09",  # Too many branches/statements/arguments
     "PLW1514", # TODO `open` in text mode without explicit `encoding` argument
+    "UP031",  # Use format specifiers instead of percent format
 ]
 [tool.ruff.lint.flake8-quotes]
 # Single quotes are currently prevalent in the codebase. Not being checked.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/python-targetcli-fb.spec 
new/targetcli-fb-3.0.2/python-targetcli-fb.spec
--- old/targetcli-fb-3.0.1/python-targetcli-fb.spec     1970-01-01 
01:00:00.000000000 +0100
+++ new/targetcli-fb-3.0.2/python-targetcli-fb.spec     2026-10-18 
12:57:33.079877553 +0200
@@ -0,0 +1,69 @@
+Name:           python-targetcli-fb
+Version:        2.1.58
+Release:        %autorelease
+Summary:        Command shell for managing the Linux LIO kernel target
+
+License:        Apache-2.0
+URL:            https://github.com/open-iscsi/targetcli-fb
+Source:         %{pypi_source targetcli}
+
+BuildArch:      noarch
+BuildRequires:  python3-devel
+BuildRequires:  python3-pip
+BuildRequires:  hatch
+BuildRequires:  python3-hatch-vcs
+BuildRequires:  python3-hatchling
+BuildRequires:  systemd-rpm-macros
+
+%global _description %{expand:
+An administration shell for configuring iSCSI, FCoE, and other SCSI targets,
+using the TCM/LIO kernel target subsystem.
+}
+
+%description
+%{_description}
+
+%package -n targetcli
+Summary:        %{summary}
+Requires:       python3-configshell
+Requires:       python3-rtslib
+Requires:       target-restore
+Requires:       python3-six
+Requires:       python3-dbus
+Requires:       python3-gobject-base
+
+%description -n targetcli
+%{_description}
+
+%prep
+%autosetup -n targetcli-%{version}
+
+%build
+%pyproject_wheel
+
+%install
+%pyproject_install
+%pyproject_save_files targetcli
+
+mkdir -p %{buildroot}%{_sysconfdir}/target/backup
+install -d %{buildroot}%{_unitdir}
+install -p -m 644 systemd/targetclid.service %{buildroot}%{_unitdir}/
+install -p -m 644 systemd/targetclid.socket %{buildroot}%{_unitdir}/
+install -d %{buildroot}%{_mandir}/man8
+install -p -m 644 targetcli.8 %{buildroot}%{_mandir}/man8/
+install -p -m 644 targetclid.8 %{buildroot}%{_mandir}/man8/
+
+%files -n targetcli -f %{pyproject_files}
+%license COPYING
+%doc README.md THANKS
+%{_bindir}/targetcli
+%{_bindir}/targetclid
+%{_mandir}/man8/targetcli.8*
+%{_mandir}/man8/targetclid.8*
+%{_unitdir}/targetclid.service
+%{_unitdir}/targetclid.socket
+%dir %{_sysconfdir}/target
+%dir %{_sysconfdir}/target/backup
+
+%changelog
+%autochangelog
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/src/targetcli/targetclid.py 
new/targetcli-fb-3.0.2/src/targetcli/targetclid.py
--- old/targetcli-fb-3.0.1/src/targetcli/targetclid.py  2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/src/targetcli/targetclid.py  2026-10-18 
12:57:33.099879795 +0200
@@ -153,7 +153,7 @@
                 connection.close()
                 still_listen = False
             else:
-                self.con._stdout = self.con._stderr = f = 
tempfile.NamedTemporaryFile(mode='w', delete=False)
+                self.con._stdout = self.con._stderr = f = 
tempfile.NamedTemporaryFile(mode='w', delete=False)  # noqa: SIM115
                 try:
                     # extract multiple commands delimited with '%'
                     list_data = data.decode().split('%')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/src/targetcli/ui_backstore.py 
new/targetcli-fb-3.0.2/src/targetcli/ui_backstore.py
--- old/targetcli-fb-3.0.1/src/targetcli/ui_backstore.py        2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/src/targetcli/ui_backstore.py        2026-10-18 
12:57:33.079877553 +0200
@@ -516,7 +516,9 @@
         '''
         if current_param != 'file_or_dev':
             return []
-        completions = complete_path(text, lambda x: stat.S_ISREG(x) or 
stat.S_ISBLK(x))
+        completions = complete_path(
+            text, lambda x: stat.S_ISREG(x) or stat.S_ISBLK(x),
+        ) if text else []
         if len(completions) == 1 and not completions[0].endswith('/'):
             completions = [completions[0] + ' ']
         return completions
@@ -545,11 +547,10 @@
             return False
 
         os.close(f)
-        if struct.unpack('I', buf)[0] == 0:
-            return False
-        return True
+        return struct.unpack('I', buf)[0] != 0
 
-    def ui_command_create(self, name, dev, readonly=None, wwn=None):
+    def ui_command_create(self, name, dev, readonly=None, wwn=None,
+                          exclusive=None):
         '''
         Creates an Block Storage object. "dev" is the path to the TYPE_DISK
         block device to use.
@@ -561,7 +562,11 @@
 
         wwn = self.ui_eval_param(wwn, 'string', None)
 
-        so = BlockStorageObject(name, dev, readonly=readonly, wwn=wwn)
+        excl_string = self.ui_eval_param(exclusive, 'string', None)
+        exclusive = True if excl_string is None else 
self.ui_eval_param(exclusive, "bool", True)
+
+        so = BlockStorageObject(name, dev, readonly=readonly, wwn=wwn,
+                                exclusive=exclusive)
         ui_so = UIBlockStorageObject(so, self)
         self.setup_model_alias(so)
         self.shell.log.info(f"Created block storage object {name} using 
{dev}.")
@@ -573,7 +578,7 @@
         '''
         if current_param != 'dev':
             return []
-        completions = complete_path(text, stat.S_ISBLK)
+        completions = complete_path(text, stat.S_ISBLK) if text else []
         if len(completions) == 1 and not completions[0].endswith('/'):
             completions = [completions[0] + ' ']
         return completions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/src/targetcli/ui_root.py 
new/targetcli-fb-3.0.2/src/targetcli/ui_root.py
--- old/targetcli-fb-3.0.1/src/targetcli/ui_root.py     2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/src/targetcli/ui_root.py     2026-10-18 
12:57:33.079877553 +0200
@@ -155,8 +155,7 @@
                     prefs = Path(universal_prefs_file).read_text()
                     backups = [line for line in prefs.splitlines() if re.match(
                         r'^max_backup_files\s*=', line)]
-                    if max_backup_files < 
int(backups[0].split('=')[1].strip()):
-                        max_backup_files = 
int(backups[0].split('=')[1].strip())
+                    max_backup_files = max(max_backup_files, 
int(backups[0].split('=')[1].strip()))
                 except:
                     self.shell.log.debug(f"No universal prefs file 
'{universal_prefs_file}'.")
 
@@ -200,8 +199,7 @@
         savefile = os.path.expanduser(savefile)
 
         if not os.path.isfile(savefile):
-            self.shell.log.info(f"Restore file {savefile} not found")
-            return
+            raise ExecutionError(f"Restore file {savefile} not found")
 
         target = self.ui_eval_param(target, 'string', None)
         storage_object = self.ui_eval_param(storage_object, 'string', None)
@@ -320,7 +318,7 @@
         else:
             printed_sessions = list(self.rtsroot.sessions)
 
-        if len(printed_sessions):
+        if printed_sessions:
             for session in printed_sessions:
                 print_session(session)
         elif sid is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/targetcli-fb-3.0.1/src/targetcli/ui_target.py 
new/targetcli-fb-3.0.2/src/targetcli/ui_target.py
--- old/targetcli-fb-3.0.1/src/targetcli/ui_target.py   2025-02-25 
09:52:35.000000000 +0100
+++ new/targetcli-fb-3.0.2/src/targetcli/ui_target.py   2026-10-18 
12:57:33.079877553 +0200
@@ -939,11 +939,15 @@
         if current_param == 'tpg_lun_or_backstore':
             completions = []
             for backstore in self.get_node('/backstores').children:
-                completions = [storage_object.path for storage_object in 
backstore.children]
+                completions.extend(storage_object.path
+                                   for storage_object in backstore.children)
 
-            completions.extend(lun.name for lun in 
self.parent.parent.get_node("luns").children)
+            completions.extend(lun.name
+                               for lun in 
self.parent.parent.get_node("luns").children)
 
-            completions.extend(complete_path(text, lambda x: stat.S_ISREG(x) 
or stat.S_ISBLK(x)))
+            if text:
+                completions.extend(complete_path(text,
+                                                 lambda x: stat.S_ISREG(x) or 
stat.S_ISBLK(x)))
 
             completions = [c for c in completions if c.startswith(text)]
         else:
@@ -1151,10 +1155,13 @@
         if current_param == 'storage_object':
             storage_objects = []
             for backstore in self.get_node('/backstores').children:
-                storage_objects = [storage_object.path for storage_object in 
backstore.children]
+                storage_objects.extend(storage_object.path
+                                       for storage_object in 
backstore.children)
             completions = [so for so in storage_objects if so.startswith(text)]
 
-            completions.extend(complete_path(text, lambda x: stat.S_ISREG(x) 
or stat.S_ISBLK(x)))
+            if text:
+                completions.extend(complete_path(text,
+                                                 lambda x: stat.S_ISREG(x) or 
stat.S_ISBLK(x)))
         else:
             completions = []
 

Reply via email to