Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-ogr for openSUSE:Factory 
checked in at 2026-08-22 21:36:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ogr (Old)
 and      /work/SRC/openSUSE:Factory/.python-ogr.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ogr"

Sat Aug 22 21:36:08 2026 rev:11 rq:1373056 version:0.62.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ogr/python-ogr.changes    2026-05-27 
17:34:45.740801165 +0200
+++ /work/SRC/openSUSE:Factory/.python-ogr.new.1258/python-ogr.changes  
2026-08-22 21:38:12.701657271 +0200
@@ -1,0 +2,16 @@
+Sat Aug 22 10:09:12 UTC 2026 - Dirk MΓΌller <[email protected]>
+
+- update to 0.62.4:
+  * The `ForgejoService.get_project_from_url()` method has been
+    updated to ensure repository names are parsed accurately. It
+    now correctly removes the `.git` extension from the
+    repository name, addressing an issue where the extension was
+    previously retained.
+  * The implementation of `__str__`, `__eq__`, and `__hash__`
+    methods has been added to `ForgejoService`.
+  * Emoji reactions on GitLab comments now work reliably
+  * The `ogr` library now correctly handles the Forgejo 'error'
+    commit flag, resolving an issue that previously caused it to
+    fail during internal mapping.
+
+-------------------------------------------------------------------

Old:
----
  ogr-0.61.1.tar.gz

New:
----
  ogr-0.62.4.tar.gz

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

Other differences:
------------------
++++++ python-ogr.spec ++++++
--- /var/tmp/diff_new_pack.H5J613/_old  2026-08-22 21:38:13.574688542 +0200
+++ /var/tmp/diff_new_pack.H5J613/_new  2026-08-22 21:38:13.576688613 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-ogr
-Version:        0.61.1
+Version:        0.62.4
 Release:        0
 Summary:        One API for multiple git forges
 License:        MIT

++++++ ogr-0.61.1.tar.gz -> ogr-0.62.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.fullsend/config.yaml 
new/ogr-0.62.4/.fullsend/config.yaml
--- old/ogr-0.61.1/.fullsend/config.yaml        1970-01-01 01:00:00.000000000 
+0100
+++ new/ogr-0.62.4/.fullsend/config.yaml        2026-08-19 11:25:08.000000000 
+0200
@@ -0,0 +1,19 @@
+# fullsend per-repo configuration
+# https://github.com/fullsend-ai/fullsend
+#
+# This file configures fullsend for per-repo installation mode.
+# See ADR 0033 for details.
+version: "1"
+roles:
+    - triage
+    - coder
+    - review
+    - fix
+allowed_remote_resources:
+    - https://raw.githubusercontent.com/fullsend-ai/fullsend/
+    - https://raw.githubusercontent.com/fullsend-ai/agents/
+create_issues:
+    allow_targets:
+        repos:
+            - packit/ogr
+            - fullsend-ai/fullsend
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.git_archival.txt 
new/ogr-0.62.4/.git_archival.txt
--- old/ogr-0.61.1/.git_archival.txt    2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.git_archival.txt    2026-08-19 11:25:08.000000000 +0200
@@ -1,4 +1,4 @@
-node: b41306d84f85d3e758c40d82169940010f181eeb
-node-date: 2026-03-09T15:26:11+01:00
-describe-name: 0.61.1
-ref-names: tag: 0.61.1
+node: fb82c4c03fa2ce609c89fa65d8a327467c870802
+node-date: 2026-08-19T11:25:08+02:00
+describe-name: 0.62.4
+ref-names: HEAD -> main, tag: 0.62.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/check-release-notes.yml 
new/ogr-0.62.4/.github/workflows/check-release-notes.yml
--- old/ogr-0.61.1/.github/workflows/check-release-notes.yml    2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/check-release-notes.yml    2026-08-19 
11:25:08.000000000 +0200
@@ -10,6 +10,6 @@
 jobs:
   check_release_notes:
     name: Notes are either written, or there are none
-    uses: packit/.github/.github/workflows/check-release-notes.yml@main
+    uses: 
packit/.github/.github/workflows/check-release-notes.yml@2837c96caf71966609451ad0323552ef4be11a23
     with:
       description: ${{ github.event.pull_request.body }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/do-release.yml 
new/ogr-0.62.4/.github/workflows/do-release.yml
--- old/ogr-0.61.1/.github/workflows/do-release.yml     2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/do-release.yml     2026-08-19 
11:25:08.000000000 +0200
@@ -11,7 +11,7 @@
     if: github.event.pull_request.merged == true && 
contains(github.event.pull_request.labels.*.name, 'release') && 
github.repository_owner == 'packit'
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
       - name: Create GitHub release
         run: |
           VERSION=$(grep -oP '^# \K[0-9.]*' CHANGELOG.md | head -n 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/docs.yml 
new/ogr-0.62.4/.github/workflows/docs.yml
--- old/ogr-0.61.1/.github/workflows/docs.yml   2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/.github/workflows/docs.yml   2026-08-19 11:25:08.000000000 
+0200
@@ -13,7 +13,7 @@
 
     steps:
       - name: Checkout branch
-        uses: actions/checkout@v3
+        uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
       - name: Build and push docs
         run: |
           git config user.name Packit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/fullsend.yaml 
new/ogr-0.62.4/.github/workflows/fullsend.yaml
--- old/ogr-0.61.1/.github/workflows/fullsend.yaml      1970-01-01 
01:00:00.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/fullsend.yaml      2026-08-19 
11:25:08.000000000 +0200
@@ -0,0 +1,88 @@
+# This file is managed by fullsend. Do not edit it directly.
+# Upstream: 
https://github.com/fullsend-ai/fullsend/blob/main/internal/scaffold/fullsend-repo/.github/workflows/fullsend.yaml
+---
+# fullsend shim workflow (per-repo installation mode)
+# Routes events to agent workflows via reusable-dispatch.yml.
+# All agent execution happens in this repo's context β€” no external
+# config repo is needed.
+#
+# Security: pull_request_target runs the BASE branch version of this workflow,
+# preventing PRs from modifying it to exfiltrate credentials.
+# This shim never checks out PR code, so it is not vulnerable to "pwn request"
+# attacks.
+#
+# Routing: this shim forwards the raw event context to reusable-dispatch.yml,
+# which determines the stage and runs the agent inline (ADR 62).
+# Adding a new stage requires only a job in reusable-dispatch.yml β€” zero 
changes to this repo.
+#
+# Concurrency: per-role cancel-in-progress groups live in reusable-dispatch.yml
+# stage jobs with -agent- suffix. Roles operate independently (#2452).
+name: fullsend
+
+permissions:
+  actions: write
+  id-token: write
+  contents: write
+  issues: write
+  packages: read
+  pull-requests: write
+
+on:
+  issues:
+    types: [opened, edited, labeled]
+  issue_comment:
+    types: [created]
+  pull_request_target:
+    types: [opened, synchronize, ready_for_review, closed, labeled, unlabeled]
+  pull_request_review:
+    types: [submitted]
+
+jobs:
+  dispatch:
+    if: >-
+      github.event_name != 'issue_comment'
+      || github.event.comment.user.type != 'Bot'
+    uses: 
fullsend-ai/fullsend/.github/workflows/reusable-dispatch.yml@3cfa255ab4cc8190670585ea42da529119251632
 # v0.32.0
+    with:
+      event_action: ${{ github.event.action }}
+      install_mode: per-repo
+      mint_url: ${{ vars.FULLSEND_MINT_URL }}
+      gcp_region: ${{ vars.FULLSEND_GCP_REGION }}
+      runner_image: ubuntu-24.04
+    secrets:
+      FULLSEND_GCP_WIF_PROVIDER: ${{ secrets.FULLSEND_GCP_WIF_PROVIDER }}
+      FULLSEND_GCP_PROJECT_ID: ${{ secrets.FULLSEND_GCP_PROJECT_ID }}
+
+  stop-fix:
+    if: >-
+      github.event_name == 'issue_comment'
+        && github.event.issue.pull_request
+        && github.event.comment.user.type != 'Bot'
+        && github.event.comment.body == '/fs-fix-stop'
+        && (
+          github.event.comment.author_association == 'OWNER'
+          || github.event.comment.author_association == 'MEMBER'
+          || github.event.comment.author_association == 'COLLABORATOR'
+          || github.event.comment.author_association == 'CONTRIBUTOR'
+          || github.event.comment.user.login == github.event.issue.user.login
+        )
+    runs-on: ubuntu-24.04
+    permissions:
+      contents: read
+      issues: write
+      pull-requests: write
+    steps:
+      - name: Add fullsend-no-fix label and notify
+        env:
+          GH_TOKEN: ${{ github.token }}
+          PR_NUMBER: ${{ github.event.issue.number }}
+          REPO: ${{ github.repository }}
+        run: |
+          set -euo pipefail
+          gh label create "fullsend-no-fix" --repo "$REPO" \
+            --description "Skip bot-triggered fix agent runs" --color "FBCA04" 
\
+            --force 2>/dev/null || true
+          gh pr edit "$PR_NUMBER" --repo "$REPO" \
+            --add-label "fullsend-no-fix"
+          gh pr comment "$PR_NUMBER" --repo "$REPO" \
+            --body "Fix agent disabled for this PR. Remove the 
\`fullsend-no-fix\` label or use \`/fs-fix\` to re-engage."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ogr-0.61.1/.github/workflows/opened-prs-to-the-board.yml 
new/ogr-0.62.4/.github/workflows/opened-prs-to-the-board.yml
--- old/ogr-0.61.1/.github/workflows/opened-prs-to-the-board.yml        
2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/opened-prs-to-the-board.yml        
2026-08-19 11:25:08.000000000 +0200
@@ -8,7 +8,7 @@
     if: github.event.pull_request.draft == false
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/[email protected]
+      - uses: actions/add-to-project@a9f041ddd462ed185893ea1024cec954f50dbe42 
# v0.3.0
         with:
           project-url: https://github.com/orgs/packit/projects/14
           github-token: ${{ secrets.RELEASEBOT_GITHUB_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/prepare-release.yml 
new/ogr-0.62.4/.github/workflows/prepare-release.yml
--- old/ogr-0.61.1/.github/workflows/prepare-release.yml        2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/prepare-release.yml        2026-08-19 
11:25:08.000000000 +0200
@@ -16,16 +16,16 @@
       contents: write
 
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
         with:
           fetch-depth: 0
       - name: Prepare release content
-        uses: packit/prepare-release@v1
+        uses: packit/prepare-release@3b7d729bf7a233a9696171d06abf9b8ef31e6e94 
# v1
         with:
           version: ${{ inputs.version }}
           specfiles: fedora/python-ogr.spec
       - name: Create Pull Request
-        uses: peter-evans/create-pull-request@v7
+        uses: 
peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7
         with:
           labels: release
           commit-message: Release ${{ inputs.version }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.github/workflows/pypi-publish.yml 
new/ogr-0.62.4/.github/workflows/pypi-publish.yml
--- old/ogr-0.61.1/.github/workflows/pypi-publish.yml   2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/.github/workflows/pypi-publish.yml   2026-08-19 
11:25:08.000000000 +0200
@@ -16,11 +16,11 @@
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
         with:
           persist-credentials: false
 
-      - uses: actions/setup-python@v5
+      - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # 
v5
 
       - name: Get history and tags for SCM versioning to work
         run: |
@@ -34,7 +34,7 @@
           python -m build
 
       - name: Store the distribution packages
-        uses: actions/upload-artifact@v4
+        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 
# v4
         with:
           name: python-package-distributions
           path: dist/
@@ -52,13 +52,13 @@
 
     steps:
       - name: Download all the dists
-        uses: actions/download-artifact@v4
+        uses: 
actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
         with:
           name: python-package-distributions
           path: dist/
 
       - name: Publish πŸ“¦ to PyPI
         # https://github.com/pypa/gh-action-pypi-publish
-        uses: pypa/gh-action-pypi-publish@release/v1
+        uses: 
pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
         with:
           verbose: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/.pre-commit-config.yaml 
new/ogr-0.62.4/.pre-commit-config.yaml
--- old/ogr-0.61.1/.pre-commit-config.yaml      2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/.pre-commit-config.yaml      2026-08-19 11:25:08.000000000 
+0200
@@ -7,10 +7,10 @@
     rev: 25.9.0
     hooks:
       - id: black
-  - repo: https://github.com/pre-commit/mirrors-prettier
-    rev: v4.0.0-alpha.8
+  - repo: https://github.com/hukkin/mdformat
+    rev: 1.0.0
     hooks:
-      - id: prettier
+      - id: mdformat
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v6.0.0
     hooks:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/CHANGELOG.md new/ogr-0.62.4/CHANGELOG.md
--- old/ogr-0.61.1/CHANGELOG.md 2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/CHANGELOG.md 2026-08-19 11:25:08.000000000 +0200
@@ -1,3 +1,16 @@
+# 0.62.4
+
+- The `ForgejoService.get_project_from_url()` method has been updated to 
ensure repository names are parsed accurately. It now correctly removes the 
`.git` extension from the repository name, addressing an issue where the 
extension was previously retained. (#1005)
+- The implementation of `__str__`, `__eq__`, and `__hash__` methods has been 
added to `ForgejoService`. (#1001)
+
+# 0.62.3
+
+- Emoji reactions on GitLab comments now work reliably
+
+# 0.61.2
+
+- The `ogr` library now correctly handles the Forgejo 'error' commit flag, 
resolving an issue that previously caused it to fail during internal mapping. 
(#991)
+
 # 0.61.1
 
 - Force downstream synchronization of upstream configuration to enable side 
tagging in EPEL 10.
@@ -499,8 +512,6 @@
 - Tests were removed from the zuul gating pipeline. (@lbarcziova)
 - We now use [rpmautospec] for generating changelogs in Fedora. (@TomasTomecek)
 
-[rpmautospec]: https://pagure.io/Fedora-Infra/rpmautospec
-
 # 0.11.1
 
 ## New Features
@@ -549,10 +560,10 @@
 - General restructure of the classes thanks to the
   [Red Hat Open Source 
Contest](https://research.redhat.com/red-hat-open-source-contest/)
   project done by @mfocko.
-  _ Classes are better linked together.
-  _ Functionality is moved to the classes from the `GitProject` classes.
-  _ You can now use the properties (setters) to modify objects.
-  _ Old behaviour should work as before, but will raise deprecation warnings.
+  \_ Classes are better linked together.
+  \_ Functionality is moved to the classes from the `GitProject` classes.
+  \_ You can now use the properties (setters) to modify objects.
+  \_ Old behaviour should work as before, but will raise deprecation warnings.
 
 ## Fixes
 
@@ -722,3 +733,5 @@
 ## Fixes
 
 - Object representation of the pull-request and pull-request commend.
+
+[rpmautospec]: https://pagure.io/Fedora-Infra/rpmautospec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/COMPATIBILITY.md 
new/ogr-0.62.4/COMPATIBILITY.md
--- old/ogr-0.61.1/COMPATIBILITY.md     2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/COMPATIBILITY.md     2026-08-19 11:25:08.000000000 +0200
@@ -7,79 +7,79 @@
 
 ### `IssueComment`
 
-|                  | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ---------------- | :----: | :----: | :----: | :-----: |
-| `body` (get/set) |  βœ”/βœ”   |  βœ”/βœ”   |  βœ”/✘   |   ✘/✘   |
-| `add_reaction`   |   βœ”    |   βœ”    |   ✘    |    ✘    |
-| `get_reactions`  |   βœ”    |   βœ”    |   ✘    |    ✘    |
+| `body` (get/set) | βœ”/βœ” | βœ”/βœ” | βœ”/✘ | βœ”/βœ” |
+| `add_reaction` | βœ” | βœ” | ✘ | βœ” |
+| `get_reactions` | βœ” | βœ” | ✘ | βœ” |
 
 ### `PRComment`
 
-|                  | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ---------------- | :----: | :----: | :----: | :-----: |
-| `body` (get/set) |  βœ”/βœ”   |  βœ”/βœ”   |  βœ”/✘   |    ✘    |
-| `add_reaction`   |   βœ”    |   βœ”    |   ✘    |    ✘    |
-| `get_reactions`  |   βœ”    |   βœ”    |   ✘    |    ✘    |
-| `closed_by`      |   ✘    |   ✘    |   βœ”    |    ✘    |
+| `body` (get/set) | βœ”/βœ” | βœ”/βœ” | βœ”/✘ | βœ”/βœ” |
+| `add_reaction` | βœ” | βœ” | ✘ | βœ” |
+| `get_reactions` | βœ” | βœ” | ✘ | βœ” |
 
 ## Issue
 
-|             | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ----------- | :----: | :----: | :----: | :-----: |
-| `add_label` |   βœ”    |   βœ”    |   ✘    |    ✘    |
+| `add_label` | βœ” | βœ” | ✘ | βœ” |
 
 ## Pull request
 
-|                   | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ----------------- | :----: | :----: | :----: | :-----: |
-| `add_label`       |   βœ”    |   βœ”    |   ✘    |    βœ”    |
-| `get_all_commits` |   βœ”    |   βœ”    |   ✘    |    βœ”    |
+| `add_label` | βœ” | βœ” | ✘ | βœ” |
+| `get_all_commits` | βœ” | βœ” | ✘ | βœ” |
+| `closed_by` | ✘ | ✘ | βœ” | βœ” |
 
 ## Release
 
-|                   | GitHub | GitLab |          Pagure          | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ----------------- | :----: | :----: | :----------------------: | :-----: |
-| `edit_release`    |   βœ”    |   ✘    |            ✘             |    βœ”    |
-| `body` (only get) |   βœ”    |   βœ”    | ✘ (returns empty string) |    βœ”    |
+| `edit_release` | βœ” | ✘ | ✘ | βœ” |
+| `body` (only get) | βœ” | βœ” | ✘ (returns empty string) | βœ” |
 
 ## Commit flag
 
-|          | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | -------- | :----: | :----: | :----: | :-----: |
-| `edited` |   βœ”    |   ✘    |   βœ”    |    ✘    |
+| `edited` | βœ” | ✘ | βœ” | βœ” |
 
 ## Project
 
-|                               | GitHub | GitLab |         Pagure          | 
Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ----------------------------- | :----: | :----: | :---------------------: | 
:-----: |
-| `change_token`                |   ✘    |   βœ”    |            βœ”            |  
  ✘    |
-| `get_release`                 |   βœ”    |   βœ”    |            ✘            |  
  ✘    |
-| `get_commits`                 |   βœ”    |   βœ”    |            ✘            |  
  βœ”    |
-| `get_latest_release`          |   βœ”    |   βœ”    |            ✘            |  
  ✘    |
-| `is_private`                  |   βœ”    |   βœ”    | ✘ (may not be accurate) |  
  βœ”    |
-| `remove_user`                 |   ✘    |   ✘    |            βœ”            |  
  βœ”    |
-| `add_group`                   |   ✘    |   ✘    |            βœ”            |  
  ✘    |
-| `remove_group`                |   ✘    |   ✘    |            βœ”            |  
  ✘    |
-| `which_groups_can_merge_pr`   |   ✘    |   ✘    |            βœ”            |  
  ✘    |
-| `get_pr_files_diff`           |   ✘    |   ✘    |            βœ”            |  
  ✘    |
-| `get_users_with_given_access` |   ✘    |   ✘    |            βœ”            |  
  βœ”    |
+| `change_token` | ✘ | βœ” | βœ” | ✘ |
+| `get_release` | βœ” | βœ” | ✘ | βœ” |
+| `get_commits` | βœ” | βœ” | ✘ | βœ” |
+| `get_latest_release` | βœ” | βœ” | ✘ | βœ” |
+| `is_private` | βœ” | βœ” | ✘ (may not be accurate) | βœ” |
+| `remove_user` | ✘ | ✘ | βœ” | βœ” |
+| `add_group` | ✘ | ✘ | βœ” | ✘ |
+| `remove_group` | ✘ | ✘ | βœ” | ✘ |
+| `which_groups_can_merge_pr` | ✘ | ✘ | βœ” | ✘ |
+| `get_pr_files_diff` | ✘ | ✘ | βœ” | ✘ |
+| `get_users_with_given_access` | ✘ | ✘ | βœ” | βœ” |
 
 ## User
 
-|                | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | -------------- | :----: | :----: | :----: | :-----: |
-| `get_projects` |   βœ”    |   ✘    |   βœ”    |    βœ”    |
-| `get_forks`    |   βœ”    |   ✘    |   βœ”    |    βœ”    |
-| `get_email`    |   βœ”    |   βœ”    |   ✘    |    βœ”    |
+| `get_projects` | βœ” | ✘ | βœ” | βœ” |
+| `get_forks` | βœ” | ✘ | βœ” | βœ” |
+| `get_email` | βœ” | βœ” | ✘ | βœ” |
 
 ## Reaction
 
-|          | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | -------- | :----: | :----: | :----: | :-----: |
-| `delete` |   βœ”    |   βœ”    |   ✘    |    ✘    |
+| `delete` | βœ” | βœ” | ✘ | βœ” |
 
 ## Service
 
-|             | GitHub | GitLab | Pagure | Forgejo |
+| | GitHub | GitLab | Pagure | Forgejo |
 | ----------- | :----: | :----: | :----: | :-----: |
-| `get_group` |   ✘    |   ✘    |   βœ”    |    ✘    |
+| `get_group` | ✘ | ✘ | βœ” | ✘ |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/CONTRIBUTING.md 
new/ogr-0.62.4/CONTRIBUTING.md
--- old/ogr-0.61.1/CONTRIBUTING.md      2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/CONTRIBUTING.md      2026-08-19 11:25:08.000000000 +0200
@@ -53,11 +53,15 @@
 
 To build the test image run:
 
-    make build-test-image
+```
+make build-test-image
+```
 
 You can run the test now with:
 
-    make check-in-container
+```
+make check-in-container
+```
 
 The 'make build-test-image' command builds a local image with all the 
dependencies using
 [ansible-bender](https://github.com/ansible-community/ansible-bender);
@@ -77,7 +81,7 @@
 The missing file will be automatically generated from the real response. Do 
not forget to commit the file as well.
 
 If you need to regenerate a response file, just remove it and rerun the tests.
-(There are Makefile targets for removing the response files: 
`remove-response-files`, `remove-response-files-github`, 
`remove-response-files-gitlab`, `remove-response-files-pagure`.)
+(There are Makefile targets for removing the response files: 
`remove-response-files`, `remove-response-files-github`, 
`remove-response-files-gitlab`, `remove-response-files-pagure`, 
`remove-response-files-forgejo`.)
 
 In case you (re)generate response files, don't forget to run `pre-commit` that 
includes cleanup of response files.
 
@@ -131,6 +135,6 @@
 make check
 ```
 
----
+______________________________________________________________________
 
 Thank you for your interest!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/Makefile new/ogr-0.62.4/Makefile
--- old/ogr-0.61.1/Makefile     2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/Makefile     2026-08-19 11:25:08.000000000 +0200
@@ -52,7 +52,10 @@
 remove-response-files-gitlab:
        rm -rf ./tests/integration/gitlab/test_data/
 
-remove-response-files: remove-response-files-github 
remove-response-files-pagure remove-response-files-gitlab
+remove-response-files-forgejo:
+       rm -rf ./tests/integration/forgejo/test_data/
+
+remove-response-files: remove-response-files-github 
remove-response-files-pagure remove-response-files-gitlab 
remove-response-files-forgejo
 
 requre-purge-files:
        pre-commit run --all-files requre-purge --verbose --hook-stage manual
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/fedora/python-ogr.spec 
new/ogr-0.62.4/fedora/python-ogr.spec
--- old/ogr-0.61.1/fedora/python-ogr.spec       2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/fedora/python-ogr.spec       2026-08-19 11:25:08.000000000 
+0200
@@ -1,5 +1,5 @@
 Name:           python-ogr
-Version:        0.61.1
+Version:        0.62.4
 Release:        1%{?dist}
 Summary:        One API for multiple git forges
 
@@ -47,6 +47,15 @@
 
 
 %changelog
+* Thu Aug 13 2026 Packit Team <[email protected]> - 0.62.4-1
+- New upstream release 0.62.4
+
+* Fri Jul 31 2026 Packit Team <[email protected]> - 0.62.3-1
+- New upstream release 0.62.3
+
+* Mon Jul 20 2026 Packit Team <[email protected]> - 0.61.2-1
+- New upstream release 0.61.2
+
 * Mon Mar 09 2026 Packit Team <[email protected]> - 0.61.1-1
 - New upstream release 0.61.1
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/forgejo/flag.py 
new/ogr-0.62.4/ogr/services/forgejo/flag.py
--- old/ogr-0.61.1/ogr/services/forgejo/flag.py 2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/ogr/services/forgejo/flag.py 2026-08-19 11:25:08.000000000 
+0200
@@ -24,7 +24,7 @@
         "pending": CommitStatus.pending,
         "success": CommitStatus.success,
         "failure": CommitStatus.failure,
-        "canceled": CommitStatus.error,
+        "error": CommitStatus.error,
         "warning": CommitStatus.warning,
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/forgejo/project.py 
new/ogr-0.62.4/ogr/services/forgejo/project.py
--- old/ogr-0.61.1/ogr/services/forgejo/project.py      2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/ogr/services/forgejo/project.py      2026-08-19 
11:25:08.000000000 +0200
@@ -557,11 +557,6 @@
         filter_regex: Optional[str] = None,
         recursive: bool = False,
     ) -> Iterable[str]:
-        logger.warning(
-            "β€ΉForgejoProject.get_files()β€Ί method can fail because of incorrect"
-            " OpenAPI spec",
-        )
-
         ref = ref or self.default_branch
         paths = self.__get_files(".", ref=ref, recursive=recursive)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/forgejo/service.py 
new/ogr-0.62.4/ogr/services/forgejo/service.py
--- old/ogr-0.61.1/ogr/services/forgejo/service.py      2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/ogr/services/forgejo/service.py      2026-08-19 
11:25:08.000000000 +0200
@@ -3,13 +3,13 @@
 
 from functools import cached_property
 from typing import Optional
-from urllib.parse import urlparse
 
 from pyforgejo import PyforgejoApi
 
 from ogr.abstract import GitUser
 from ogr.exceptions import OgrException
 from ogr.factory import use_for_service
+from ogr.parsing import parse_git_repo
 from ogr.services.base import BaseGitService
 from ogr.services.forgejo.project import ForgejoProject
 from ogr.services.forgejo.user import ForgejoUser
@@ -35,6 +35,22 @@
     def api(self) -> PyforgejoApi:
         return PyforgejoApi(base_url=self.instance_url, api_key=self._token)
 
+    def __str__(self) -> str:
+        token_str = f", token='{self._token[:1]}***{self._token[-1:]}'"
+        return f"ForgejoService(instance_url='{self.instance_url}'" 
f"{token_str})"
+
+    def __eq__(self, o: object) -> bool:
+        if not issubclass(o.__class__, ForgejoService):
+            return False
+
+        return (
+            self._token == o._token  # type: ignore
+            and self.instance_url == o.instance_url  # type: ignore
+        )
+
+    def __hash__(self) -> int:
+        return hash(str(self))
+
     def get_project(  # type: ignore[override]
         self,
         repo: str,
@@ -77,16 +93,11 @@
         )
 
     def get_project_from_url(self, url: str) -> "ForgejoProject":
-        parsed_url = urlparse(url)
-        path_parts = parsed_url.path.strip("/").split("/")
-
-        if len(path_parts) < 2:
-            raise OgrException(f"Invalid Forgejo URL: {url}")
-
-        namespace = path_parts[0]
-        repo = path_parts[1]
+        repo_url = parse_git_repo(potential_url=url)
+        if not repo_url:
+            raise OgrException(f"Invalid Forgejo URL: '{url}'")
 
-        return self.get_project(repo=repo, namespace=namespace)
+        return self.get_project(repo=repo_url.repo, 
namespace=repo_url.namespace)
 
     def get_rate_limit_remaining(
         self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/github/issue.py 
new/ogr-0.62.4/ogr/services/github/issue.py
--- old/ogr-0.61.1/ogr/services/github/issue.py 2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/ogr/services/github/issue.py 2026-08-19 11:25:08.000000000 
+0200
@@ -186,4 +186,7 @@
             raise GithubAPIException("Failed to assign issue, unknown user") 
from ex
 
     def get_comment(self, comment_id: int) -> IssueComment:
-        return GithubIssueComment(self._raw_issue.get_comment(comment_id))
+        return GithubIssueComment(
+            parent=self,
+            raw_comment=self._raw_issue.get_comment(comment_id),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/github/pull_request.py 
new/ogr-0.62.4/ogr/services/github/pull_request.py
--- old/ogr-0.61.1/ogr/services/github/pull_request.py  2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/ogr/services/github/pull_request.py  2026-08-19 
11:25:08.000000000 +0200
@@ -274,4 +274,7 @@
         ]
 
     def get_comment(self, comment_id: int) -> PRComment:
-        return GithubPRComment(self._raw_pr.get_issue_comment(comment_id))
+        return GithubPRComment(
+            parent=self,
+            raw_comment=self._raw_pr.get_issue_comment(comment_id),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/gitlab/issue.py 
new/ogr-0.62.4/ogr/services/gitlab/issue.py
--- old/ogr-0.61.1/ogr/services/gitlab/issue.py 2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/ogr/services/gitlab/issue.py 2026-08-19 11:25:08.000000000 
+0200
@@ -184,4 +184,7 @@
         self._raw_issue.save()
 
     def get_comment(self, comment_id: int) -> IssueComment:
-        return GitlabIssueComment(self._raw_issue.notes.get(comment_id))
+        return GitlabIssueComment(
+            parent=self,
+            raw_comment=self._raw_issue.notes.get(comment_id),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/gitlab/pull_request.py 
new/ogr-0.62.4/ogr/services/gitlab/pull_request.py
--- old/ogr-0.61.1/ogr/services/gitlab/pull_request.py  2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/ogr/services/gitlab/pull_request.py  2026-08-19 
11:25:08.000000000 +0200
@@ -300,4 +300,7 @@
         self._raw_pr.save()
 
     def get_comment(self, comment_id: int) -> PRComment:
-        return GitlabPRComment(self._raw_pr.notes.get(comment_id))
+        return GitlabPRComment(
+            parent=self,
+            raw_comment=self._raw_pr.notes.get(comment_id),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/ogr/services/pagure/issue.py 
new/ogr-0.62.4/ogr/services/pagure/issue.py
--- old/ogr-0.61.1/ogr/services/pagure/issue.py 2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/ogr/services/pagure/issue.py 2026-08-19 11:25:08.000000000 
+0200
@@ -237,7 +237,8 @@
 
     def get_comment(self, comment_id: int) -> IssueComment:
         return PagureIssueComment(
-            self.project._call_project_api(
+            parent=self,
+            raw_comment=self.project._call_project_api(
                 "issue",
                 str(self.id),
                 "comment",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/plans/README.md 
new/ogr-0.62.4/plans/README.md
--- old/ogr-0.61.1/plans/README.md      2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/plans/README.md      2026-08-19 11:25:08.000000000 +0200
@@ -9,7 +9,9 @@
 
 Run:
 
-    $ tmt -v run -a provision -h local
+```
+$ tmt -v run -a provision -h local
+```
 
 > [!WARNING]
 >
@@ -20,17 +22,23 @@
 
 It may be needed to install the `container` provisioning plugin:
 
-    $ sudo dnf install tmt-provision-container
+```
+$ sudo dnf install tmt-provision-container
+```
 
 Afterwards you can run the tests via:
 
-    $ tmt -v run -a provision -h container
+```
+$ tmt -v run -a provision -h container
+```
 
 Additionally you can also limit what tests are being run by setting the
 `TEST_TARGET` environment variable:
 
-    # For example this limits to only Forgejo tests
-    $ tmt -v run -e TEST_TARGET=integration/forgejo/ -a provision -h container
+```
+# For example this limits to only Forgejo tests
+$ tmt -v run -e TEST_TARGET=integration/forgejo/ -a provision -h container
+```
 
 ## Regenerating requre responses via `tmt`
 
@@ -47,13 +55,15 @@
 This can be avoided by instructing tmt to keep the work directory after the 
test
 execution is finished:
 
-    # For example to generate Forgejo responses
-    $ tmt -vv \
-        run -a -k \
-        -e FORGEJO_TOKEN=$FORGEJO_TOKEN -e TEST_TARGET=integration/forgejo/ \
-          provision -h container \
-          plan -n full \
-          report -h display
+```
+# For example to generate Forgejo responses
+$ tmt -vv \
+    run -a -k \
+    -e FORGEJO_TOKEN=$FORGEJO_TOKEN -e TEST_TARGET=integration/forgejo/ \
+      provision -h container \
+      plan -n full \
+      report -h display
+```
 
 Explanation of the `tmt` command:
 
@@ -74,8 +84,9 @@
 >    cp .env.template .env
 >    ```
 >
-> 2. Populate `.env` with tokens
-> 3. Adjust the tmt command:
+> 1. Populate `.env` with tokens
+>
+> 1. Adjust the tmt command:
 >
 >    ```
 >    tmt -vv \
@@ -91,7 +102,9 @@
 Afterwards the generated responses can be found in the test directory
 (`<ID>` varies):
 
-    /var/tmp/tmt/<ID>/plans/full/discover/default-0/tests/
+```
+/var/tmp/tmt/<ID>/plans/full/discover/default-0/tests/
+```
 
 > [!WARNING]
 >
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/pyproject.toml 
new/ogr-0.62.4/pyproject.toml
--- old/ogr-0.61.1/pyproject.toml       2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/pyproject.toml       2026-08-19 11:25:08.000000000 +0200
@@ -11,7 +11,7 @@
 readme = "README.md"
 license = "MIT"
 license-files = { paths = ["LICENSE"] }
-requires-python = ">=3.9"
+requires-python = ">=3.12"
 classifiers = [
     "Development Status :: 4 - Beta",
     "Intended Audience :: Developers",
@@ -20,9 +20,9 @@
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3 :: Only",
-    "Programming Language :: Python :: 3.9",
-    "Programming Language :: Python :: 3.10",
-    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: 3.14",
     "Topic :: Software Development",
     "Topic :: Utilities",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ogr-0.61.1/tests/integration/forgejo/test_data/test_issues/Issues.test_issue_no_such_assignee.yaml
 
new/ogr-0.62.4/tests/integration/forgejo/test_data/test_issues/Issues.test_issue_no_such_assignee.yaml
--- 
old/ogr-0.61.1/tests/integration/forgejo/test_data/test_issues/Issues.test_issue_no_such_assignee.yaml
      2026-03-09 15:26:11.000000000 +0100
+++ 
new/ogr-0.62.4/tests/integration/forgejo/test_data/test_issues/Issues.test_issue_no_such_assignee.yaml
      2026-08-19 11:25:08.000000000 +0200
@@ -303,3 +303,69 @@
             x-frame-options: SAMEORIGIN
           next_request: null
           status_code: 500
+      - metadata:
+          latency: 0.2674534320831299
+          module_call_list:
+          - unittest.case
+          - requre.record_and_replace
+          - tests.integration.forgejo.test_issues
+          - ogr.abstract.exception
+          - ogr.services.forgejo.issue
+          - pyforgejo.issue.client
+          - pyforgejo.issue.raw_client
+          - pyforgejo.core.http_client
+          - httpx._client
+          - requre.objects
+          - requre.cassette
+          - httpx._client
+          - send
+        output:
+          __store_indicator: 2
+          _content:
+            message: ''
+            url: https://v10.next.forgejo.org/api/swagger
+          _elapsed: 0.267228
+          encoding: utf-8
+          headers:
+            cache-control: max-age=0, private, must-revalidate, no-transform
+            content-length: '64'
+            content-type: application/json;charset=utf-8
+            date: Mon, 05 Jan 2026 11:20:35 GMT
+            vary: Origin
+            x-content-type-options: nosniff
+            x-frame-options: SAMEORIGIN
+          next_request: null
+          status_code: 500
+      - metadata:
+          latency: 0.2674534320831299
+          module_call_list:
+          - unittest.case
+          - requre.record_and_replace
+          - tests.integration.forgejo.test_issues
+          - ogr.abstract.exception
+          - ogr.services.forgejo.issue
+          - pyforgejo.issue.client
+          - pyforgejo.issue.raw_client
+          - pyforgejo.core.http_client
+          - httpx._client
+          - requre.objects
+          - requre.cassette
+          - httpx._client
+          - send
+        output:
+          __store_indicator: 2
+          _content:
+            message: ''
+            url: https://v10.next.forgejo.org/api/swagger
+          _elapsed: 0.267228
+          encoding: utf-8
+          headers:
+            cache-control: max-age=0, private, must-revalidate, no-transform
+            content-length: '64'
+            content-type: application/json;charset=utf-8
+            date: Mon, 05 Jan 2026 11:20:35 GMT
+            vary: Origin
+            x-content-type-options: nosniff
+            x-frame-options: SAMEORIGIN
+          next_request: null
+          status_code: 500
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ogr-0.61.1/tests/integration/forgejo/test_data/test_project/test_get_files.yaml
 
new/ogr-0.62.4/tests/integration/forgejo/test_data/test_project/test_get_files.yaml
--- 
old/ogr-0.61.1/tests/integration/forgejo/test_data/test_project/test_get_files.yaml
 2026-03-09 15:26:11.000000000 +0100
+++ 
new/ogr-0.62.4/tests/integration/forgejo/test_data/test_project/test_get_files.yaml
 2026-08-19 11:25:08.000000000 +0200
@@ -224,7 +224,7 @@
             x-frame-options: SAMEORIGIN
           next_request: null
           status_code: 200
-      
https://v10.next.forgejo.org/api/v1/repos/packit-validator/hello-world/contents/?ref=master:
+      
https://v10.next.forgejo.org/api/v1/repos/packit-validator/hello-world/contents/?ref=master:
 &id001
       - metadata:
           latency: 0.6014642715454102
           module_call_list:
@@ -872,3 +872,4 @@
             x-frame-options: SAMEORIGIN
           next_request: null
           status_code: 200
+      
https://v10.next.forgejo.org/api/v1/repos/packit-validator/hello-world/contents?ref=master:
 *id001
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/tests/integration/forgejo/test_project.py 
new/ogr-0.62.4/tests/integration/forgejo/test_project.py
--- old/ogr-0.61.1/tests/integration/forgejo/test_project.py    2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/forgejo/test_project.py    2026-08-19 
11:25:08.000000000 +0200
@@ -53,9 +53,6 @@
     assert "Testing repository for python-ogr package." in file_content
 
 
[email protected](
-    reason="Broken API spec resulting in failing validation in pyforgejo 
(#11)",
-)
 @record_httpx()
 def test_get_files(hello_world_project):
     files = list(hello_world_project.get_files())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/tests/integration/github/test_issues.py 
new/ogr-0.62.4/tests/integration/github/test_issues.py
--- old/ogr-0.61.1/tests/integration/github/test_issues.py      2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/github/test_issues.py      2026-08-19 
11:25:08.000000000 +0200
@@ -200,8 +200,10 @@
         assert issue.description == old_description
 
     def test_get_comment(self):
-        comment = 
self.hello_world_project.get_issue(297).get_comment(926035728)
+        issue = self.hello_world_project.get_issue(297)
+        comment = issue.get_comment(926035728)
         assert comment.body == "this is a comment"
+        assert comment._parent is issue
 
     def test_create_with_disabled_issues(self):
         with pytest.raises(IssueTrackerDisabled):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ogr-0.61.1/tests/integration/github/test_pull_requests.py 
new/ogr-0.62.4/tests/integration/github/test_pull_requests.py
--- old/ogr-0.61.1/tests/integration/github/test_pull_requests.py       
2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/github/test_pull_requests.py       
2026-08-19 11:25:08.000000000 +0200
@@ -362,8 +362,10 @@
         assert "\nDate: Mon, 18 Nov 2019 12:42:35 +0100\n" in patch.decode()
 
     def test_get_comment(self):
-        comment = self.hello_world_project.get_pr(72).get_comment(559765628)
+        pr = self.hello_world_project.get_pr(72)
+        comment = pr.get_comment(559765628)
         assert comment.body == "check comment updates\r\n\r\nedit"
+        assert comment._parent is pr
 
     def test_pr_not_exists(self):
         with pytest.raises(GithubAPIException):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/tests/integration/gitlab/test_issues.py 
new/ogr-0.62.4/tests/integration/gitlab/test_issues.py
--- old/ogr-0.61.1/tests/integration/gitlab/test_issues.py      2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/gitlab/test_issues.py      2026-08-19 
11:25:08.000000000 +0200
@@ -241,8 +241,10 @@
         assert issue.description == old_description
 
     def test_get_comment(self):
-        comment = self.project.get_issue(102).get_comment(686264162)
+        issue = self.project.get_issue(102)
+        comment = issue.get_comment(686264162)
         assert comment.body == "issue comment"
+        assert comment._parent is issue
 
     def test_create_with_disabled_issues(self):
         project = self.service.get_project(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ogr-0.61.1/tests/integration/gitlab/test_pull_requests.py 
new/ogr-0.62.4/tests/integration/gitlab/test_pull_requests.py
--- old/ogr-0.61.1/tests/integration/gitlab/test_pull_requests.py       
2026-03-09 15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/gitlab/test_pull_requests.py       
2026-08-19 11:25:08.000000000 +0200
@@ -445,8 +445,10 @@
         assert "\nDate: Wed, 11 Sep 2019 14:50:41 +0200\n" in patch.decode()
 
     def test_get_comment(self):
-        comment = self.project.get_pr(1).get_comment(214842329)
+        pr = self.project.get_pr(1)
+        comment = pr.get_comment(214842329)
         assert comment.body == "first comment of mergerequest"
+        assert comment._parent is pr
 
     def test_pr_not_exists(self):
         with pytest.raises(GitlabAPIException):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/tests/integration/pagure/test_issues.py 
new/ogr-0.62.4/tests/integration/pagure/test_issues.py
--- old/ogr-0.61.1/tests/integration/pagure/test_issues.py      2026-03-09 
15:26:11.000000000 +0100
+++ new/ogr-0.62.4/tests/integration/pagure/test_issues.py      2026-08-19 
11:25:08.000000000 +0200
@@ -131,8 +131,10 @@
             namespace=None,
             username="nikromen",
         )
-        comment = project.get_issue(1).get_comment(753462)
+        issue = project.get_issue(1)
+        comment = issue.get_comment(753462)
         assert comment.body == "example issue comment"
+        assert comment._parent is issue
 
     def test_create_with_disabled_issues(self):
         with pytest.raises(IssueTrackerDisabled):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ogr-0.61.1/tests/unit/test_factory.py 
new/ogr-0.62.4/tests/unit/test_factory.py
--- old/ogr-0.61.1/tests/unit/test_factory.py   2026-03-09 15:26:11.000000000 
+0100
+++ new/ogr-0.62.4/tests/unit/test_factory.py   2026-08-19 11:25:08.000000000 
+0200
@@ -6,9 +6,10 @@
 from flexmock import Mock, flexmock
 from urllib3.util import Retry
 
-from ogr import GithubService, GitlabService, PagureService
+from ogr import ForgejoService, GithubService, GitlabService, PagureService
 from ogr.exceptions import OgrException
 from ogr.factory import get_instances_from_dict, get_project, get_service_class
+from ogr.services.forgejo import ForgejoProject
 from ogr.services.github import GithubProject
 from ogr.services.gitlab import GitlabProject
 from ogr.services.pagure import PagureProject
@@ -225,6 +226,33 @@
             ),
         ),
         (
+            "https://src.stg.fedoraproject.org/rpms/python-dockerpty.git";,
+            None,
+            [ForgejoService(instance_url="https://src.stg.fedoraproject.org";)],
+            True,
+            ForgejoProject(
+                repo="python-dockerpty",
+                namespace="rpms",
+                service=ForgejoService(
+                    instance_url="https://src.stg.fedoraproject.org";,
+                ),
+            ),
+        ),
+        (
+            "https://src.fedoraproject.org/rpms/python-dockerpty.git";,
+            None,
+            [
+                
ForgejoService(instance_url="https://src.stg.fedoraproject.org";),
+                ForgejoService(instance_url="https://src.fedoraproject.org";),
+            ],
+            False,
+            ForgejoProject(
+                repo="python-dockerpty",
+                namespace="rpms",
+                
service=ForgejoService(instance_url="https://src.fedoraproject.org";),
+            ),
+        ),
+        (
             "https://src.stg.fedoraproject.org/rpms/python-dockerpty.git";,
             None,
             [PagureService(instance_url="https://src.stg.fedoraproject.org";)],

Reply via email to