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")],
