Skip to content

Commit cded5db

Browse files
Add create commit to empty-upload command
This is so that we can also create the commit before uploading. The create-commit is optional (i.e. if users don't pass in values, then their workflow shouldn't break). It will only create a commit if the values are passed.
1 parent 0ebc513 commit cded5db

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

codecov_cli/commands/empty_upload.py

+41-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
from codecov_cli.fallbacks import CodecovOption, FallbackFieldEnum
77
from codecov_cli.helpers.args import get_cli_args
8-
from codecov_cli.helpers.git import GitService
98
from codecov_cli.helpers.options import global_options
9+
from codecov_cli.services.commit import create_commit_logic
1010
from codecov_cli.services.empty_upload import empty_upload_logic
1111
from codecov_cli.types import CommandContext
1212

@@ -15,6 +15,26 @@
1515

1616
@click.command()
1717
@click.option("--force", is_flag=True, default=False)
18+
@click.option(
19+
"--parent-sha",
20+
help="SHA (with 40 chars) of what should be the parent of this commit",
21+
)
22+
@click.option(
23+
"-P",
24+
"--pr",
25+
"--pull-request-number",
26+
"pull_request_number",
27+
help="Specify the pull request number mannually. Used to override pre-existing CI environment variables",
28+
cls=CodecovOption,
29+
fallback_field=FallbackFieldEnum.pull_request_number,
30+
)
31+
@click.option(
32+
"-B",
33+
"--branch",
34+
help="Branch to which this commit belongs to",
35+
cls=CodecovOption,
36+
fallback_field=FallbackFieldEnum.branch,
37+
)
1838
@global_options
1939
@click.pass_context
2040
def empty_upload(
@@ -25,9 +45,29 @@ def empty_upload(
2545
token: typing.Optional[str],
2646
git_service: typing.Optional[str],
2747
fail_on_error: typing.Optional[bool],
48+
parent_sha: typing.Optional[str],
49+
pull_request_number: typing.Optional[int],
50+
branch: typing.Optional[str],
2851
):
52+
logger.error("Empty upload started")
2953
enterprise_url = ctx.obj.get("enterprise_url")
3054
args = get_cli_args(ctx)
55+
56+
if parent_sha and pull_request_number and branch:
57+
logger.debug("Attempting to Create Commit before doing an empty upload.")
58+
create_commit_logic(
59+
commit_sha,
60+
parent_sha,
61+
pull_request_number,
62+
branch,
63+
slug,
64+
token,
65+
git_service,
66+
enterprise_url,
67+
fail_on_error,
68+
args,
69+
)
70+
3171
logger.debug(
3272
"Starting empty upload process",
3373
extra=dict(
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from click.testing import CliRunner
2+
3+
from codecov_cli.fallbacks import FallbackFieldEnum
4+
from codecov_cli.main import cli
5+
from tests.factory import FakeProvider, FakeVersioningSystem
6+
7+
def test_invoke_empty_upload_with_create_commit(mocker):
8+
create_commit_mock = mocker.patch("codecov_cli.commands.empty_upload.create_commit_logic")
9+
empty_upload_mock = mocker.patch("codecov_cli.commands.empty_upload.empty_upload_logic")
10+
11+
fake_ci_provider = FakeProvider({FallbackFieldEnum.commit_sha: None})
12+
mocker.patch("codecov_cli.main.get_ci_adapter", return_value=fake_ci_provider)
13+
14+
runner = CliRunner()
15+
result = runner.invoke(cli, ["empty-upload",
16+
"-C", "command-sha",
17+
"--slug", "owner/repo",
18+
"--parent-sha", "asdf",
19+
"--branch", "main",
20+
"--pr", 1234], obj={})
21+
assert result.exit_code == 0
22+
23+
create_commit_mock.assert_called_once()
24+
empty_upload_mock.assert_called_once()
25+
26+
def test_invoke_empty_upload_no_create_commit(mocker):
27+
create_commit_mock = mocker.patch("codecov_cli.commands.empty_upload.create_commit_logic")
28+
empty_upload_mock = mocker.patch("codecov_cli.commands.empty_upload.empty_upload_logic")
29+
30+
fake_ci_provider = FakeProvider({FallbackFieldEnum.commit_sha: None})
31+
mocker.patch("codecov_cli.main.get_ci_adapter", return_value=fake_ci_provider)
32+
33+
runner = CliRunner()
34+
result = runner.invoke(cli, ["empty-upload",
35+
"-C", "command-sha",
36+
"--slug", "owner/repo"], obj={})
37+
assert result.exit_code == 0
38+
39+
create_commit_mock.assert_not_called()
40+
empty_upload_mock.assert_called_once()
41+

0 commit comments

Comments
 (0)