mirror of
https://github.com/openSUSE/osc.git
synced 2025-02-23 10:42:14 +01:00
225 lines
8.7 KiB
Gherkin
225 lines
8.7 KiB
Gherkin
Feature: `git-obs pr` command
|
|
|
|
|
|
Background:
|
|
Given I set working directory to "{context.osc.temp}"
|
|
And I execute git-obs with args "repo fork pool/test-GitPkgA"
|
|
And I execute git-obs with args "repo clone Admin/test-GitPkgA --no-ssh-strict-host-key-checking"
|
|
And I set working directory to "{context.osc.temp}/test-GitPkgA"
|
|
And I execute "sed -i 's@^\(Version: *\) .*@\1 v1.1@' *.spec"
|
|
And I execute "git commit -m 'v1.1' -a"
|
|
And I execute "sed -i 's@^\(Version: *\) .*@\1 v1.2@' *.spec"
|
|
And I execute "git commit -m 'v1.2' -a"
|
|
And I execute "git push"
|
|
And I execute git-obs with args "pr create --title 'Change version' --description='some text'"
|
|
|
|
|
|
@destructive
|
|
Scenario: List pull requests
|
|
When I execute git-obs with args "pr list pool/test-GitPkgA"
|
|
Then the exit code is 0
|
|
And stdout matches
|
|
"""
|
|
ID : pool/test-GitPkgA#1
|
|
URL : http://localhost:{context.podman.container.ports[gitea_http]}/pool/test-GitPkgA/pulls/1
|
|
Title : Change version
|
|
State : open
|
|
Draft : no
|
|
Merged : no
|
|
Allow edit : no
|
|
Author : Admin \(admin@example.com\)
|
|
Source : Admin/test-GitPkgA, branch: factory, commit: .*
|
|
Description : some text
|
|
"""
|
|
And stderr is
|
|
"""
|
|
Using the following Gitea settings:
|
|
* Config path: {context.git_obs.config}
|
|
* Login (name of the entry in the config file): admin
|
|
* URL: http://localhost:{context.podman.container.ports[gitea_http]}
|
|
* User: Admin
|
|
|
|
|
|
Total entries: 1
|
|
"""
|
|
|
|
|
|
@destructive
|
|
Scenario: Search pull requests
|
|
When I execute git-obs with args "pr search"
|
|
Then the exit code is 0
|
|
And stdout matches
|
|
"""
|
|
ID : pool/test-GitPkgA#1
|
|
URL : http://localhost:{context.podman.container.ports[gitea_http]}/pool/test-GitPkgA/pulls/1
|
|
Title : Change version
|
|
State : open
|
|
Author : Admin \(admin@example.com\)
|
|
Description : some text
|
|
"""
|
|
And stderr is
|
|
"""
|
|
Using the following Gitea settings:
|
|
* Config path: {context.git_obs.config}
|
|
* Login (name of the entry in the config file): admin
|
|
* URL: http://localhost:{context.podman.container.ports[gitea_http]}
|
|
* User: Admin
|
|
|
|
|
|
Total entries: 1
|
|
"""
|
|
|
|
|
|
@destructive
|
|
Scenario: Get a pull request
|
|
When I execute git-obs with args "pr get pool/test-GitPkgA#1"
|
|
Then the exit code is 0
|
|
And stdout matches
|
|
"""
|
|
ID : pool/test-GitPkgA#1
|
|
URL : http://localhost:{context.podman.container.ports[gitea_http]}/pool/test-GitPkgA/pulls/1
|
|
Title : Change version
|
|
State : open
|
|
Draft : no
|
|
Merged : no
|
|
Allow edit : no
|
|
Author : Admin \(admin@example.com\)
|
|
Source : Admin/test-GitPkgA, branch: factory, commit: .*
|
|
Description : some text
|
|
"""
|
|
And stderr is
|
|
"""
|
|
Using the following Gitea settings:
|
|
* Config path: {context.git_obs.config}
|
|
* Login (name of the entry in the config file): admin
|
|
* URL: http://localhost:{context.podman.container.ports[gitea_http]}
|
|
* User: Admin
|
|
|
|
Total entries: 1
|
|
"""
|
|
|
|
|
|
@destructive
|
|
Scenario: Get a pull request that doesn't exist
|
|
When I execute git-obs with args "pr get does-not/exist#1"
|
|
Then the exit code is 1
|
|
And stdout matches
|
|
"""
|
|
"""
|
|
And stderr is
|
|
"""
|
|
Using the following Gitea settings:
|
|
* Config path: {context.git_obs.config}
|
|
* Login (name of the entry in the config file): admin
|
|
* URL: http://localhost:{context.podman.container.ports[gitea_http]}
|
|
* User: Admin
|
|
|
|
Total entries: 0
|
|
ERROR: Couldn't retrieve the following pull requests: does-not/exist#1
|
|
"""
|
|
|
|
|
|
@destructive
|
|
Scenario: Checkout a pull request
|
|
Given I set working directory to "{context.osc.temp}"
|
|
And I execute git-obs with args "repo clone pool/test-GitPkgA --no-ssh-strict-host-key-checking --directory=pool-test-GitPkgA"
|
|
And I set working directory to "{context.osc.temp}/pool-test-GitPkgA"
|
|
When I execute git-obs with args "pr checkout 1"
|
|
Then the exit code is 0
|
|
And stdout is
|
|
"""
|
|
"""
|
|
And stderr is
|
|
"""
|
|
Using the following Gitea settings:
|
|
* Config path: {context.git_obs.config}
|
|
* Login (name of the entry in the config file): admin
|
|
* URL: http://localhost:{context.podman.container.ports[gitea_http]}
|
|
* User: Admin
|
|
|
|
Using core.sshCommand: ssh -o IdentitiesOnly=yes -o IdentityFile={context.fixtures}/ssh-keys/admin -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR
|
|
From ssh://localhost:{context.podman.container.ports[gitea_ssh]}/Admin/test-GitPkgA
|
|
* [new branch] factory -> Admin/factory
|
|
Using core.sshCommand: ssh -o IdentitiesOnly=yes -o IdentityFile={context.fixtures}/ssh-keys/admin -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR
|
|
From ssh://localhost:{context.podman.container.ports[gitea_ssh]}/pool/test-GitPkgA
|
|
* [new ref] refs/pull/1/head -> pull/1
|
|
Switched to branch 'pull/1'
|
|
"""
|
|
|
|
@destructive
|
|
Scenario: Checkout a pull request as a different user, make changes, commit, push
|
|
Given I set working directory to "{context.osc.temp}"
|
|
And I execute git-obs with args "repo clone pool/test-GitPkgA --no-ssh-strict-host-key-checking --directory=pool-test-GitPkgA -G alice"
|
|
And I set working directory to "{context.osc.temp}/pool-test-GitPkgA"
|
|
And I execute git-obs with args "pr checkout 1"
|
|
And I execute git-obs with args "api -X PUT teams/1/members/alice"
|
|
And I execute git-obs with args "pr set --allow-maintainer-edit=1 pool/test-GitPkgA#1"
|
|
When I execute "sed -i 's@^\(Version: *\) .*@\1 v1.3@' *.spec"
|
|
And I execute "git commit -m 'v1.3' -a"
|
|
And I execute "git push"
|
|
Then the exit code is 0
|
|
|
|
|
|
@destructive
|
|
Scenario: Rebase a pull request checkout to fast-forwardable changes
|
|
# Alice makes a pull request checkout
|
|
Given I set working directory to "{context.osc.temp}"
|
|
And I execute git-obs with args "repo clone pool/test-GitPkgA --no-ssh-strict-host-key-checking --directory=alice-test-GitPkgA -G alice"
|
|
And I set working directory to "{context.osc.temp}/alice-test-GitPkgA"
|
|
And I execute git-obs with args "pr checkout 1"
|
|
|
|
# Admin pushes additional changes
|
|
Given I set working directory to "{context.osc.temp}/test-GitPkgA"
|
|
And I execute "sed -i 's@^\(Version: *\) .*@\1 v2@' *.spec"
|
|
And I execute "git commit -m 'v2' -a"
|
|
And I execute "git push"
|
|
|
|
# rebase Alice's checkout to the latest Admin's changes
|
|
When I set working directory to "{context.osc.temp}/alice-test-GitPkgA"
|
|
# `git fetch` is required to fetch all new changes before the rebase
|
|
And I execute "git fetch Admin"
|
|
And I execute "git rebase"
|
|
And I execute "git log --pretty=format:%s HEAD^^..HEAD"
|
|
Then the exit code is 0
|
|
And stdout is
|
|
"""
|
|
v2
|
|
v1.2
|
|
"""
|
|
|
|
|
|
@destructive
|
|
Scenario: Rebase a pull request checkout to non fast-forwardable changes
|
|
# Alice makes a pull request checkout
|
|
Given I set working directory to "{context.osc.temp}"
|
|
And I execute git-obs with args "repo clone pool/test-GitPkgA --no-ssh-strict-host-key-checking --directory=alice-test-GitPkgA -G alice"
|
|
And I set working directory to "{context.osc.temp}/alice-test-GitPkgA"
|
|
And I execute git-obs with args "pr checkout 1"
|
|
And I execute "sed -i 's@^\(Version: *\) .*@\1 v123@' *.spec"
|
|
And I execute "git commit -m 'v123' -a"
|
|
|
|
# Admin pushes a non fast-forwardable change
|
|
Given I set working directory to "{context.osc.temp}/test-GitPkgA"
|
|
And I execute "git reset --hard HEAD^"
|
|
And I execute "git push --force"
|
|
|
|
# rebase Alice's checkout to the latest Admin's changes
|
|
When I set working directory to "{context.osc.temp}/alice-test-GitPkgA"
|
|
# `git fetch` is required to fetch all new changes before the rebase
|
|
And I execute "git fetch Admin"
|
|
And I execute "git rebase"
|
|
# error due to a conflicting file
|
|
And the exit code is 1
|
|
# --theirs refers to Alice's version of the file
|
|
And I execute "git checkout --theirs test-GitPkgA.spec"
|
|
And I execute "git add test-GitPkgA.spec"
|
|
# avoid opening an editor by setting the GIT_EDITOR env variable
|
|
And I execute "GIT_EDITOR=true git rebase --continue"
|
|
And I execute "git log --pretty=format:%s HEAD^^..HEAD"
|
|
Then the exit code is 0
|
|
And stdout is
|
|
"""
|
|
v123
|
|
v1.1
|
|
"""
|