ghstack 0.9.4__tar.gz → 0.9.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. ghstack-0.9.4/README.md → ghstack-0.9.5/PKG-INFO +25 -46
  2. ghstack-0.9.4/PKG-INFO → ghstack-0.9.5/README.md +5 -72
  3. ghstack-0.9.5/pyproject.toml +49 -0
  4. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/action.py +1 -1
  5. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/checkout.py +3 -1
  6. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/diff.py +2 -2
  7. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/forensics.py +1 -1
  8. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/github.py +1 -1
  9. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/github_utils.py +15 -1
  10. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/land.py +3 -1
  11. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/shell.py +1 -1
  12. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/status.py +1 -1
  13. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/submit.py +41 -36
  14. ghstack-0.9.4/LICENSE +0 -19
  15. ghstack-0.9.4/ghstack/inbox.py +0 -7
  16. ghstack-0.9.4/pyproject.toml +0 -44
  17. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/__init__.py +0 -0
  18. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/__main__.py +0 -0
  19. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/cache.py +0 -0
  20. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/circleci.py +0 -0
  21. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/circleci_real.py +0 -0
  22. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/cli.py +0 -0
  23. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/config.py +0 -0
  24. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/git.py +0 -0
  25. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/github_fake.py +0 -0
  26. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/github_real.py +0 -0
  27. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/github_schema.graphql +0 -0
  28. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/gpg_sign.py +0 -0
  29. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/logs.py +0 -0
  30. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/py.typed +0 -0
  31. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/rage.py +0 -0
  32. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/test_prelude.py +0 -0
  33. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/types.py +0 -0
  34. {ghstack-0.9.4 → ghstack-0.9.5/src}/ghstack/unlink.py +0 -0
@@ -1,3 +1,23 @@
1
+ Metadata-Version: 2.3
2
+ Name: ghstack
3
+ Version: 0.9.5
4
+ Summary: Stack diff support for GitHub
5
+ Author: Edward Z. Yang
6
+ Author-email: Edward Z. Yang <ezyang@mit.edu>
7
+ License: MIT
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Dist: aiohttp>=3,<4
12
+ Requires-Dist: importlib-metadata>=1.4 ; python_full_version < '3.8'
13
+ Requires-Dist: requests>=2,<3
14
+ Requires-Dist: typing-extensions>=3
15
+ Requires-Dist: click>=8,<9
16
+ Requires-Dist: flake8>=7.0.0,<8.0.0
17
+ Requires-Python: >=3.8.1, <4.0.0
18
+ Project-URL: repository, https://github.com/ezyang/ghstack
19
+ Description-Content-Type: text/markdown
20
+
1
21
  # ghstack
2
22
 
3
23
  Conveniently submit stacks of diffs to GitHub as separate pull requests.
@@ -51,7 +71,11 @@ branch, and start working on a fresh branch.
51
71
 
52
72
  **WARNING.** You will NOT be able to merge these commits using the
53
73
  normal GitHub UI, as their branch bases won't be master. Use
54
- `ghstack land $PR_URL` to land a ghstack'ed pull request.
74
+ `ghstack land $PR_URL` (or alternatively `ghstack land #PR_NUM`) to land
75
+ a ghstack'ed pull request.
76
+
77
+ You can also setup a GitHub action to allow a bot land.
78
+ https://github.com/Chillee/ghstack_land_example/blob/main/.github/workflows/issue_comment.yml is an end-to-end example of how to do this.
55
79
 
56
80
  ## Structure of submitted pull requests
57
81
 
@@ -73,51 +97,6 @@ pull request and pushes commits onto three branches:
73
97
  want to work on the commits from another machine, this is the best way
74
98
  to get it.
75
99
 
76
- ## Developer notes
77
-
78
- This project uses [Poetry](https://python-poetry.org/docs/#installation), so
79
- after you've installed Poetry itself, run this command in your clone of this
80
- repo to install all the dependencies you need for working on `ghstack`:
81
- ```
82
- poetry install
83
- ```
84
- Note that this installs the dependencies (and `ghstack` itself) in an isolated
85
- Python virtual environment rather than globally. If your cwd is in your clone of
86
- this repo then you can run your locally-built `ghstack` using `poetry run
87
- ghstack $ARGS`, but if you want to run it from somewhere else, you probably want
88
- [`poetry shell`](https://python-poetry.org/docs/cli/#shell) instead:
89
- ```
90
- poetry shell
91
- cd $SOMEWHERE
92
- ghstack $ARGS
93
- ```
94
-
95
- ### Testing
96
-
97
- We have tests, using a mock GitHub GraphQL server! How cool is that?
98
- ```
99
- poetry run python test_ghstack.py
100
- ```
101
- That runs most of the tests; you can run all tests (including lints) like this:
102
- ```
103
- poetry run python run_tests.py
104
- ```
105
-
106
- ### Publishing
107
-
108
- You can also [use Poetry to
109
- publish](https://python-poetry.org/docs/cli/#publish) to a package repository.
110
- For instance, if you've configured your [Poetry
111
- repositories](https://python-poetry.org/docs/repositories/) like this:
112
- ```
113
- poetry config repositories.testpypi https://test.pypi.org/legacy/
114
- ```
115
- Then you can publish to TestPyPI like this:
116
- ```
117
- poetry publish --build --repository testpypi
118
- ```
119
- To publish to PyPI itself, just omit the `--repository` argument.
120
-
121
100
  ## Design constraints
122
101
 
123
102
  There are some weird aspects about GitHub's design which lead to unusual
@@ -1,28 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: ghstack
3
- Version: 0.9.4
4
- Summary: Stack diff support for GitHub
5
- Home-page: https://github.com/ezyang/ghstack
6
- License: MIT
7
- Author: Edward Z. Yang
8
- Author-email: ezyang@mit.edu
9
- Requires-Python: >=3.8.1,<4.0.0
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Operating System :: OS Independent
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Requires-Dist: aiohttp (>=3,<4)
18
- Requires-Dist: click (>=8,<9)
19
- Requires-Dist: flake8 (>=7.0.0,<8.0.0)
20
- Requires-Dist: importlib-metadata (>=1.4) ; python_version < "3.8"
21
- Requires-Dist: requests (>=2,<3)
22
- Requires-Dist: typing-extensions (>=3,<5)
23
- Project-URL: Repository, https://github.com/ezyang/ghstack
24
- Description-Content-Type: text/markdown
25
-
26
1
  # ghstack
27
2
 
28
3
  Conveniently submit stacks of diffs to GitHub as separate pull requests.
@@ -76,7 +51,11 @@ branch, and start working on a fresh branch.
76
51
 
77
52
  **WARNING.** You will NOT be able to merge these commits using the
78
53
  normal GitHub UI, as their branch bases won't be master. Use
79
- `ghstack land $PR_URL` to land a ghstack'ed pull request.
54
+ `ghstack land $PR_URL` (or alternatively `ghstack land #PR_NUM`) to land
55
+ a ghstack'ed pull request.
56
+
57
+ You can also setup a GitHub action to allow a bot land.
58
+ https://github.com/Chillee/ghstack_land_example/blob/main/.github/workflows/issue_comment.yml is an end-to-end example of how to do this.
80
59
 
81
60
  ## Structure of submitted pull requests
82
61
 
@@ -98,51 +77,6 @@ pull request and pushes commits onto three branches:
98
77
  want to work on the commits from another machine, this is the best way
99
78
  to get it.
100
79
 
101
- ## Developer notes
102
-
103
- This project uses [Poetry](https://python-poetry.org/docs/#installation), so
104
- after you've installed Poetry itself, run this command in your clone of this
105
- repo to install all the dependencies you need for working on `ghstack`:
106
- ```
107
- poetry install
108
- ```
109
- Note that this installs the dependencies (and `ghstack` itself) in an isolated
110
- Python virtual environment rather than globally. If your cwd is in your clone of
111
- this repo then you can run your locally-built `ghstack` using `poetry run
112
- ghstack $ARGS`, but if you want to run it from somewhere else, you probably want
113
- [`poetry shell`](https://python-poetry.org/docs/cli/#shell) instead:
114
- ```
115
- poetry shell
116
- cd $SOMEWHERE
117
- ghstack $ARGS
118
- ```
119
-
120
- ### Testing
121
-
122
- We have tests, using a mock GitHub GraphQL server! How cool is that?
123
- ```
124
- poetry run python test_ghstack.py
125
- ```
126
- That runs most of the tests; you can run all tests (including lints) like this:
127
- ```
128
- poetry run python run_tests.py
129
- ```
130
-
131
- ### Publishing
132
-
133
- You can also [use Poetry to
134
- publish](https://python-poetry.org/docs/cli/#publish) to a package repository.
135
- For instance, if you've configured your [Poetry
136
- repositories](https://python-poetry.org/docs/repositories/) like this:
137
- ```
138
- poetry config repositories.testpypi https://test.pypi.org/legacy/
139
- ```
140
- Then you can publish to TestPyPI like this:
141
- ```
142
- poetry publish --build --repository testpypi
143
- ```
144
- To publish to PyPI itself, just omit the `--repository` argument.
145
-
146
80
  ## Design constraints
147
81
 
148
82
  There are some weird aspects about GitHub's design which lead to unusual
@@ -189,4 +123,3 @@ So, this is not impossible to do, but it will need some work.
189
123
  You have to work out what the real base commit is, whether
190
124
  or not you need to advance it, and also rewrite the stack rendering
191
125
  code.
192
-
@@ -0,0 +1,49 @@
1
+ [project]
2
+ authors = [
3
+ {name = "Edward Z. Yang", email = "ezyang@mit.edu"},
4
+ ]
5
+ license = {text = "MIT"}
6
+ requires-python = "<4.0.0,>=3.8.1"
7
+ dependencies = [
8
+ "aiohttp<4,>=3",
9
+ "importlib-metadata>=1.4; python_version < \"3.8\"",
10
+ "requests<3,>=2",
11
+ "typing-extensions>=3",
12
+ "click<9,>=8",
13
+ "flake8<8.0.0,>=7.0.0",
14
+ ]
15
+ name = "ghstack"
16
+ version = "0.9.5"
17
+ description = "Stack diff support for GitHub"
18
+ readme = "README.md"
19
+ classifiers = [
20
+ "Programming Language :: Python :: 3",
21
+ "License :: OSI Approved :: MIT License",
22
+ "Operating System :: OS Independent",
23
+ ]
24
+
25
+ [project.urls]
26
+ repository = "https://github.com/ezyang/ghstack"
27
+
28
+ [project.scripts]
29
+ ghstack = "ghstack.cli:main"
30
+
31
+ [dependency-groups]
32
+ dev = [
33
+ "black<25.0.0,>=24.3.0",
34
+ "flake8<8,>=7",
35
+ "graphql-core<4,>=3",
36
+ "hypothesis<7,>=6",
37
+ "mypy<2,>=1",
38
+ "pytest<8,>=7",
39
+ "usort<2,>=1",
40
+ "ufmt<3,>=2",
41
+ "lintrunner<1.0.0,>=0.11.0",
42
+ "types-requests<3.0.0.0,>=2.31.0.10",
43
+ "pytest-xdist<4.0.0,>=3.5.0",
44
+ "expecttest<1.0.0,>=0.2.0",
45
+ ]
46
+
47
+ [build-system]
48
+ requires = ["uv_build>=0.6,<0.7"]
49
+ build-backend = "uv_build"
@@ -26,7 +26,7 @@ def main(
26
26
  }
27
27
  }
28
28
  """,
29
- **params
29
+ **params,
30
30
  )
31
31
  pr_id = pr_result["data"]["repository"]["pullRequest"]["id"]
32
32
 
@@ -15,7 +15,9 @@ def main(
15
15
  remote_name: str,
16
16
  ) -> None:
17
17
 
18
- params = ghstack.github_utils.parse_pull_request(pull_request)
18
+ params = ghstack.github_utils.parse_pull_request(
19
+ pull_request, sh=sh, remote_name=remote_name
20
+ )
19
21
  head_ref = github.get_head_ref(**params)
20
22
  orig_ref = re.sub(r"/head$", "/orig", head_ref)
21
23
  if orig_ref == head_ref:
@@ -14,7 +14,7 @@ RE_GH_METADATA = re.compile(
14
14
 
15
15
 
16
16
  RAW_PULL_REQUEST_RESOLVED = (
17
- r"Pull Request resolved: "
17
+ r"(Pull Request resolved|Pull-Request-resolved): "
18
18
  r"https://{github_url}/(?P<owner>[^/]+)/(?P<repo>[^/]+)/pull/(?P<number>[0-9]+)"
19
19
  )
20
20
 
@@ -93,7 +93,7 @@ class Diff:
93
93
  # be the same.
94
94
  source_id: str
95
95
 
96
- # The contents of 'Pull Request resolved'. This is None for
96
+ # The contents of 'Pull-Request-resolved'. This is None for
97
97
  # diffs that haven't been submitted by ghstack. For BC reasons,
98
98
  # this also accepts gh-metadata.
99
99
  pull_request_resolved: Optional[PullRequestResolved]
@@ -73,7 +73,7 @@ async def main(
73
73
  }
74
74
  }
75
75
  """,
76
- **params
76
+ **params,
77
77
  )
78
78
  nodes = r["data"]["repository"]["pullRequest"]["commits"]["nodes"]
79
79
 
@@ -38,7 +38,7 @@ class GitHubEndpoint(metaclass=ABCMeta):
38
38
  }
39
39
  }
40
40
  """,
41
- **params
41
+ **params,
42
42
  )
43
43
  r = pr_result["data"]["repository"]["pullRequest"]["headRefName"]
44
44
  assert isinstance(r, str), type(r)
@@ -115,9 +115,23 @@ GitHubPullRequestParams = TypedDict(
115
115
  )
116
116
 
117
117
 
118
- def parse_pull_request(pull_request: str) -> GitHubPullRequestParams:
118
+ def parse_pull_request(
119
+ pull_request: str,
120
+ *,
121
+ sh: Optional[ghstack.shell.Shell] = None,
122
+ remote_name: Optional[str] = None,
123
+ ) -> GitHubPullRequestParams:
119
124
  m = RE_PR_URL.match(pull_request)
120
125
  if not m:
126
+ # We can reconstruct the URL if just a PR number is passed
127
+ if sh is not None and remote_name is not None:
128
+ remote_url = sh.git("remote", "get-url", remote_name)
129
+ # Do not pass the shell to avoid infinite loop
130
+ try:
131
+ return parse_pull_request(remote_url + "/pull/" + pull_request)
132
+ except RuntimeError:
133
+ # Fall back on original error message
134
+ pass
121
135
  raise RuntimeError("Did not understand PR argument. PR must be URL")
122
136
 
123
137
  github_url = m.group("github_url")
@@ -57,7 +57,9 @@ def main(
57
57
  # Furthermore, the parent commits of PR are ignored: we always
58
58
  # take the canonical version of the patch from any given pr
59
59
 
60
- params = ghstack.github_utils.parse_pull_request(pull_request)
60
+ params = ghstack.github_utils.parse_pull_request(
61
+ pull_request, sh=sh, remote_name=remote_name
62
+ )
61
63
  default_branch = ghstack.github_utils.get_github_repo_info(
62
64
  github=github,
63
65
  sh=sh,
@@ -92,7 +92,7 @@ class Shell(object):
92
92
  stdin: _HANDLE = None,
93
93
  stdout: _HANDLE = subprocess.PIPE,
94
94
  exitcode: bool = False,
95
- tick: bool = False
95
+ tick: bool = False,
96
96
  ) -> _SHELL_RET:
97
97
  """
98
98
  Run a command specified by args, and return string representing
@@ -77,7 +77,7 @@ async def main(
77
77
  }
78
78
  }
79
79
  """,
80
- **params
80
+ **params,
81
81
  )
82
82
  contexts = r["data"]["repository"]["pullRequest"]["commits"]["nodes"][0]["commit"][
83
83
  "status"
@@ -815,7 +815,7 @@ as it supports bidirectional syncing. However, there is no way to
815
815
  convert a pre-existing PR in the old style to the new format which
816
816
  supports bidirectional syncing. If you would like to blow away the old
817
817
  PR and start anew, edit the Summary in the Phabricator diff to delete
818
- the line 'Pull Request resolved' and then run ghexport again.
818
+ the line 'Pull-Request-resolved' and then run ghexport again.
819
819
  """
820
820
  )
821
821
 
@@ -832,7 +832,7 @@ the Phabricator diff page? If so, please continue to use that button
832
832
  to export your diff.
833
833
 
834
834
  If you think this is in error, edit the Summary in the Phabricator diff
835
- to delete the line 'Pull Request resolved' and then run ghexport again.
835
+ to delete the line 'Pull-Request-resolved' and then run ghexport again.
836
836
  """
837
837
  )
838
838
  else:
@@ -963,17 +963,20 @@ to disassociate the commit with the pull request, and then try again.
963
963
  commit_msg = self._update_source_id(diff.summary, elab_diff)
964
964
  else:
965
965
  # Need to insert metadata for the first time
966
- commit_msg = "".join(
967
- [
968
- f"{strip_mentions(diff.summary.rstrip())}\n\n",
969
- f"ghstack-source-id: {diff.source_id}\n",
970
- (
971
- f"ghstack-comment-id: {elab_diff.comment_id}\n"
972
- if self.direct
973
- else ""
974
- ),
975
- f"Pull Request resolved: {pull_request_resolved.url()}",
976
- ]
966
+ # TODO: Probably quicker if we reimplement reinterpret-trailers
967
+ # in Python
968
+ commit_msg = self.sh.git(
969
+ "interpret-trailers",
970
+ "--trailer",
971
+ f"ghstack-source-id: {diff.source_id}",
972
+ *(
973
+ ["--trailer", f"ghstack-comment-id: {elab_diff.comment_id}"]
974
+ if self.direct
975
+ else []
976
+ ),
977
+ "--trailer",
978
+ f"Pull-Request-resolved: {pull_request_resolved.url()}",
979
+ input=strip_mentions(diff.summary.rstrip()),
977
980
  )
978
981
 
979
982
  return DiffMeta(
@@ -1476,6 +1479,30 @@ is closed (likely due to being merged). Please rebase to upstream and try again
1476
1479
  push_branches: List[str] = []
1477
1480
  force_push_branches: List[str] = []
1478
1481
 
1482
+ for s in reversed(diffs_to_submit):
1483
+ # It is VERY important that we do base updates BEFORE real
1484
+ # head updates, otherwise GitHub will spuriously think that
1485
+ # the user pushed a number of patches as part of the PR,
1486
+ # when actually they were just from the (new) upstream
1487
+ # branch
1488
+
1489
+ for diff, b in s.push_branches:
1490
+ if b == "orig":
1491
+ q = force_push_branches
1492
+ elif b == "base":
1493
+ q = base_push_branches
1494
+ else:
1495
+ q = push_branches
1496
+ q.append(push_spec(diff, branch(s.username, s.ghnum, b)))
1497
+ # Careful! Don't push master.
1498
+ # TODO: These pushes need to be atomic (somehow)
1499
+ if base_push_branches:
1500
+ self._git_push(base_push_branches)
1501
+ if push_branches:
1502
+ self._git_push(push_branches, force=self.force)
1503
+ if force_push_branches:
1504
+ self._git_push(force_push_branches, force=True)
1505
+
1479
1506
  for s in reversed(diffs_to_submit):
1480
1507
  # NB: GraphQL API does not support modifying PRs
1481
1508
  assert not s.closed
@@ -1513,29 +1540,6 @@ is closed (likely due to being merged). Please rebase to upstream and try again
1513
1540
  body=stack_desc,
1514
1541
  )
1515
1542
 
1516
- # It is VERY important that we do base updates BEFORE real
1517
- # head updates, otherwise GitHub will spuriously think that
1518
- # the user pushed a number of patches as part of the PR,
1519
- # when actually they were just from the (new) upstream
1520
- # branch
1521
-
1522
- for diff, b in s.push_branches:
1523
- if b == "orig":
1524
- q = force_push_branches
1525
- elif b == "base":
1526
- q = base_push_branches
1527
- else:
1528
- q = push_branches
1529
- q.append(push_spec(diff, branch(s.username, s.ghnum, b)))
1530
- # Careful! Don't push master.
1531
- # TODO: These pushes need to be atomic (somehow)
1532
- if base_push_branches:
1533
- self._git_push(base_push_branches)
1534
- if push_branches:
1535
- self._git_push(push_branches)
1536
- if force_push_branches:
1537
- self._git_push(force_push_branches, force=True)
1538
-
1539
1543
  # Report what happened
1540
1544
  def format_url(s: DiffMeta) -> str:
1541
1545
  return "https://{github_url}/{owner}/{repo}/pull/{number}".format(
@@ -1797,6 +1801,7 @@ is closed (likely due to being merged). Please rebase to upstream and try again
1797
1801
  self.sh.git(
1798
1802
  "push",
1799
1803
  self.remote_name,
1804
+ "--no-verify",
1800
1805
  *(["--force"] if force else []),
1801
1806
  *branches,
1802
1807
  )
ghstack-0.9.4/LICENSE DELETED
@@ -1,19 +0,0 @@
1
- Copyright (c) Edward Z. Yang <ezyang@mit.edu>
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is
8
- furnished to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.
@@ -1,7 +0,0 @@
1
- import ghstack.github
2
- import json
3
-
4
- def main(
5
- github: ghstack.github.GitHubEndpoint,
6
- ) -> None:
7
- print(json.dumps(github.get("notifications")))
@@ -1,44 +0,0 @@
1
- [tool.poetry]
2
- name = "ghstack"
3
- version = "0.9.4"
4
- authors = ["Edward Z. Yang <ezyang@mit.edu>"]
5
- description = "Stack diff support for GitHub"
6
- readme = "README.md"
7
- repository = "https://github.com/ezyang/ghstack"
8
- include = ["ghstack/py.typed"]
9
- license = "MIT"
10
- classifiers = [
11
- "Programming Language :: Python :: 3",
12
- "License :: OSI Approved :: MIT License",
13
- "Operating System :: OS Independent",
14
- ]
15
-
16
- [tool.poetry.scripts]
17
- ghstack = "ghstack.cli:main"
18
-
19
- [tool.poetry.dependencies]
20
- aiohttp = "^3"
21
- importlib-metadata = { version = ">=1.4", python = "<3.8" }
22
- python = "^3.8.1"
23
- requests = "^2"
24
- typing-extensions = ">=3 <5"
25
- click = "^8"
26
- flake8 = "^7.0.0"
27
-
28
- [tool.poetry.dev-dependencies]
29
- black = "^24.3.0"
30
- flake8 = "^7"
31
- graphql-core = "^3"
32
- hypothesis = "^6"
33
- mypy = "^1"
34
- pytest = "^7"
35
- usort = "^1"
36
- ufmt = "^2"
37
- lintrunner = "^0.11.0"
38
- types-requests = "^2.31.0.10"
39
- pytest-xdist = "^3.5.0"
40
- expecttest = "^0.2.0"
41
-
42
- [build-system]
43
- requires = ["poetry-core>=1.0.0"]
44
- build-backend = "poetry.core.masonry.api"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes