├── .dir-locals.el
├── .github
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── config.yml
├── PULL_REQUEST_TEMPLATE
└── workflows
│ ├── compile.yml
│ ├── manual.yml
│ └── stats.yml
├── .gitignore
├── .mailmap
├── CHANGELOG
├── LICENSE
├── Makefile
├── README.org
├── default.mk
├── docs
├── .orgconfig
├── Makefile
├── forge.org
├── forge.texi
└── htmlxref.cnf
└── lisp
├── Makefile
├── forge-bitbucket.el
├── forge-commands.el
├── forge-core.el
├── forge-db.el
├── forge-discussion.el
├── forge-forgejo.el
├── forge-gitea.el
├── forge-github.el
├── forge-gitlab.el
├── forge-gogs.el
├── forge-issue.el
├── forge-notify.el
├── forge-post.el
├── forge-pullreq.el
├── forge-repo.el
├── forge-repos.el
├── forge-revnote.el
├── forge-semi.el
├── forge-tablist.el
├── forge-topic.el
├── forge-topics.el
└── forge.el
/.dir-locals.el:
--------------------------------------------------------------------------------
1 | ((nil
2 | (indent-tabs-mode . nil))
3 | (makefile-mode
4 | (indent-tabs-mode . t))
5 | (git-commit-mode
6 | (git-commit-major-mode . git-commit-elisp-text-mode))
7 | (".github/PULL_REQUEST_TEMPLATE"
8 | (nil (truncate-lines . nil)))
9 | ("CHANGELOG"
10 | (nil (fill-column . 70)
11 | (mode . display-fill-column-indicator))))
12 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Asking for help
2 | ===============
3 |
4 | To ask for help please use the **Discussions** feature. To open
5 | a new discussion, click [here][new] and then click on Select
6 | Category, most likely to select the **Q&A** category.
7 |
8 | Alternatively you can ask for help on the Emacs [StackExchange][se]
9 | site (using the `forge` tag) or on the Emacs [subreddit].
10 |
11 | Reporting issues and suggesting features
12 | ========================================
13 |
14 | To report bugs and suggest new feature use the [issue tracker][issues].
15 |
16 | Code contributions
17 | ==================
18 |
19 | If you have some code which you would like to be merged, then open a
20 | [pull request][pulls]. Please create atomic commits with descriptive
21 | commit messages and use a dedicated feature branch (`b s` might help
22 | with the latter).
23 |
24 | Documentation contributions
25 | ===========================
26 |
27 | Improving the documentation is always a good way to get started
28 | contributing to some project.
29 |
30 | In the case of Forge this is somewhat complicated by the fact that
31 | we use some custom extensions. Some meta documentation can be found
32 | [here][metadocs].
33 |
34 | TL;DR — Edit `forge.org`. Do not edit `forge.texi`. And don't touch
35 | the version numbers. The maintainers will then update `forge.texi`
36 | and the version numbers in `forge.org` and amend those changes to your
37 | commit.
38 |
39 | Donations
40 | =========
41 |
42 | Please also consider to contribute by making a
43 | [monetary donation][donations].
44 |
45 |
46 | [discussions]: https://github.com/magit/forge/discussions
47 | [donations]: https://magit.vc/donate/
48 | [issues]: https://github.com/magit/forge/issues
49 | [metadocs]: https://github.com/magit/magit/wiki/Documentation-tools-and-conventions
50 | [new]: https://github.com/magit/forge/discussions/new
51 | [pulls]: https://github.com/magit/forge/pulls
52 | [se]: https://emacs.stackexchange.com
53 | [subreddit]: https://www.reddit.com/r/emacs
54 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:
3 | name: 🪳 Bug report
4 | about: Report a defect. Do not use this for support requests and feature suggestions.
5 | ---
6 |
7 | Please explain
8 | (1) what behavior you expected
9 | (2) what behavior you observed
10 | (3) and how we can reproduce the issue.
11 |
12 | You don't have to quote the above lines to do that.
13 |
14 | Please include a backtrace in your report. In most cases doing:
15 |
16 | M-x toggle-debug-on-error RET
17 |
18 | and then going through the steps again should result in a backtrace.
19 |
20 | Also post the output of:
21 |
22 | M-x magit-version RET
23 |
24 | Before reporting a defect please try to reproduce it using an Emacs instance in which only Magit and its dependencies have been loaded. Other packages or your configuration should not be loaded. This makes it easier to determine whether the issue lays with Magit or something else.
25 |
26 | ---- now delete this line and everything above ----
27 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: "💕 Please support my work on Forge and other Emacs projects"
4 | url: https://github.com/sponsors/tarsius
5 | about: Thanks! Any support helps. These donations from users are my only income.
6 | - name: "💡 Suggest a feature ☛ please open a discussion instead of an issue"
7 | url: https://github.com/magit/forge/discussions/categories/ideas
8 | about: Start a discussion suggesting an improvement or a new feature.
9 | - name: "🆘 Ask the community for support"
10 | url: https://www.reddit.com/r/emacs
11 | about: Please also consider supporting others.
12 | - name: "🆘 Ask the maintainers for support ☛ please open a discussion"
13 | url: https://github.com/magit/forge/discussions/categories/q-a
14 | about: Please keep in mind that our bandwidth is limited.
15 | - name: "ℹ️ Forge FAQ"
16 | url: https://magit.vc/manual/forge/FAQ.html
17 | about: Others might have had the same question before.
18 | - name: "ℹ️ Forge Manual"
19 | url: https://magit.vc/manual/forge/#Top
20 | about: The fine manual may also be of use.
21 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE:
--------------------------------------------------------------------------------
1 | =================================================================
2 | Use a dedicated feature branch
3 | =================================================================
4 |
5 | Please use a dedicated feature branch for your feature request, instead of asking us to merge "your-fork/master" into the "origin/master". The use of dedicated branches makes it much more convenient to deal with pull-requests, especially when using Magit to do so.
6 |
7 | If you were about to open a pull-request asking us to merge your version of "master", then see [1] for instructions on how to quickly fix that and some information on why we ask you to do so.
8 |
9 | Additionally we ask you to allow us to push to the branch you want us to merge. We might want to push additional commits and/or make minor changes. Please make sure the box next to "Allow edits from maintainers" is checked before creating the pull-request.
10 |
11 | [1]: https://github.com/magit/magit/wiki/Dedicated-pull-request-branches
12 |
13 | =================================================================
14 | Do NOT use Github to edit files and create commit messages
15 | =================================================================
16 |
17 | Unless you are aware of all the pitfalls and take great care to avoid them, the use of Github results in many small defects, including but not limited to trailing whitespace, commit messages containing overlong lines and no newline at the very end, and "GitHub " being used as the committer. The last one cannot even be avoided, which I consider as an affront.
18 |
19 | Github is an insufficient interface for editing files and creating commits. Please don't do it when contributing to Magit.
20 |
21 | =================================================================
22 | What you should write here
23 | =================================================================
24 |
25 | Please summarize the changes made in the commits. Explain why you are making these changes, not just what changes you are making. This also applies to the commit messages.
26 |
27 | =================================================================
28 | How to update the manual
29 | =================================================================
30 |
31 | Edit only "forge.org". To update "forge.texi" run "make texi".
32 |
--------------------------------------------------------------------------------
/.github/workflows/compile.yml:
--------------------------------------------------------------------------------
1 | name: Compile
2 | on: [push, pull_request]
3 | jobs:
4 | compile:
5 | name: Compile
6 | uses: emacscollective/workflows/.github/workflows/compile.yml@main
7 |
--------------------------------------------------------------------------------
/.github/workflows/manual.yml:
--------------------------------------------------------------------------------
1 | name: Manual
2 | on:
3 | push:
4 | branches: main
5 | tags: "v[0-9]+.[0-9]+.[0-9]+"
6 | jobs:
7 | manual:
8 | name: Manual
9 | uses: emacscollective/workflows/.github/workflows/manual.yml@main
10 | secrets:
11 | aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
12 | aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
13 |
--------------------------------------------------------------------------------
/.github/workflows/stats.yml:
--------------------------------------------------------------------------------
1 | name: Statistics
2 | on:
3 | push:
4 | branches: main
5 | schedule:
6 | - cron: '3 13 * * 1'
7 | jobs:
8 | stats:
9 | name: Statistics
10 | uses: emacscollective/workflows/.github/workflows/stats.yml@main
11 | secrets:
12 | aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
13 | aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /config.mk
2 | /docs/*.html
3 | /docs/*.info
4 | /docs/*.pdf
5 | /docs/*.texi
6 | /docs/.revdesc
7 | /docs/dir
8 | /docs/stats/
9 | /lisp/*-autoloads.el
10 | /lisp/*-pkg.el
11 | /lisp/*.elc
12 |
13 | /docs/forge/
14 |
--------------------------------------------------------------------------------
/.mailmap:
--------------------------------------------------------------------------------
1 | Paul Bonaud Paul B
2 | Zainab Ali zainab-ali
3 |
--------------------------------------------------------------------------------
/CHANGELOG:
--------------------------------------------------------------------------------
1 | # -*- mode: org -*-
2 | * v0.5.3 2025-06-04
3 |
4 | - Fixed a regression in v0.5.1, which prevented labeling topics
5 | with labels that were created before Github changed the format
6 | of label IDs. #784
7 |
8 | * v0.5.2 2025-06-03
9 |
10 | - Fixed a regression in v0.5.1, which prevented the creation of a
11 | pull-request for a branch on a fork.
12 |
13 | * v0.5.1 2025-06-01
14 |
15 | - During topic creation users can now set metadata using a transient
16 | menu, instead of having to blindly edit embedded yaml. Topic
17 | creation also saw numerous other improvements, refactorings and
18 | fixes. 49c8a78cc et al.
19 |
20 | - ~forge-post-submit-callback-hook~ is now also run when a post is
21 | submitted using a GraphQL mutation. 76c9d001e
22 |
23 | - Fixed updating local state after merging a pull-request using the
24 | API. 3aee91da1
25 |
26 | - ~forge-pullreq-state-set-merged~ is no longer a no-op and offers to
27 | merge using either Git or the API. 64d02997d
28 |
29 | - GraphQL mutations used the ghub token instead of the forge token.
30 | #782
31 |
32 | Contains additional code cleanups and fixes.
33 |
34 | * v0.5.0 2025-04-01
35 |
36 | - Added support for Github discussions. This is a large addition and
37 | there are still sharp edges in need of sanding. 3aa6d2a60
38 |
39 | - Added support for more of Github's topic states, i.e., reasons why a
40 | topic is closed. a140b92db
41 |
42 | - Somewhat reluctantly started using GraphQL for mutations. For those
43 | the old REST API was more consistent and pleasant to use, but it does
44 | not support newer features. fe133a75f
45 |
46 | - Added new command ~forge-mark-completed-topics-as-done~. 514d4e31b
47 |
48 | Contains additional code cleanups and fixes.
49 |
50 | * v0.4.8 2025-03-02
51 |
52 | - At least Git 2.25.0 is required now. Same as for Magit.
53 |
54 | - The type of ~forge--topics-spec~ slot was wrong. 6eac2c3ee
55 |
56 | - Improved bindings added to ~magit-remote~. de4c964cb
57 |
58 | - Added ~forge-fork~ to ~magit-remote~ menu. 3a2739f35
59 |
60 | - ~forge-remove-topic-locally~ can now remove all marked topics. #734
61 |
62 | * v0.4.7 2025-02-04
63 |
64 | - Added new hook ~forge-topic-wash-title-hook~. #735
65 |
66 | - ~forge-rename-default-branch~ now also updates the local symref, which tracks
67 | the remote's HEAD. b7ca5e76f
68 |
69 | - Added new command ~forge-set-default-branch~. bdbf43f36
70 |
71 | - Added new class ~forge-forgejo-repository~ and changed the ~forge-alist~ for
72 | ~codeberg.org~ to use that. 0c81b44fb
73 |
74 | - Added support for visiting blobs using a browser. #91
75 |
76 | - Added support for creating issues and commenting on existing issues and
77 | pull-requests for repositories, that are tracked in Forge's database,
78 | but which have not been cloned to the local machine. #722
79 |
80 | - It is now possible to request a review from a team. #304
81 |
82 | - Addressed an incompatibility between some legacy behavior in Ghub and
83 | ~auth-source-pass~. You will have to change your configuration for this
84 | to be effective. See the [[https://magit.vc/manual/forge/Setup-for-Gitlabcom.html][updated documentation]]. #720
85 |
86 | - Added new commands ~forge-approve-pullreq~ and ~forge-request-changes~. #377
87 |
88 | - Started using the ~##~ macro and the ~partial~ shorthand from the ~llama~ package.
89 | 247330105, b17be58bc
90 |
91 | - Stopped depending on the ~dash~ package. 5c4a1afc8
92 |
93 | - Sorting topics by when they were updated was not possible because the shown
94 | key bindings were incorrect, and if if the user figured out what the secret
95 | bindings were, then it would have errored. #745
96 |
97 | - When an unknown label, assignee or review request was encountered, then all
98 | entities of that type were ignored. Now only the unknown entity is ignored.
99 | 2e040c1d2
100 |
101 | * v0.4.6 2025-01-01
102 |
103 | - ~forge-read-topic-labels~ and ~forge-read-topic-marks~ failed to use the
104 | existing labels/marks as initial input. #731
105 |
106 | - The repository at point is now recognized in ~magit-repolist-mode~ buffers.
107 | bb4d2038f
108 |
109 | - ~forge-dispatch~ is now bound in ~magit-repolist-mode-map~. 8bace81bc
110 |
111 | * v0.4.5 2024-12-08
112 |
113 | - At least Emacs 29.1 is required now.
114 |
115 | - Started cashing calls to ~git~ during transient menu refreshes, similar
116 | to how such calls are cached when refreshing a Magit buffer. #712
117 |
118 | - Fixed parent keymap of ~forge-issues-mode-map~ and ~forge-pullreqs-mode-map~.
119 | 9ac2afbbb
120 |
121 | - Fixed a regression in ~forge-topics-setup-buffer~. #725
122 |
123 | - By default only draft pull-requests are shown in italic now. The new
124 | ~forge-pullreq-draft~ face can be used to control how such pull-requests
125 | are shown. Previously all topics that are marked as done were shown
126 | in italic. #726
127 |
128 | - Fixed infinite recursion in ~forge-get-issue~ and ~forge-get-pullreq~. #704
129 |
130 | - Fixed visiting commit in a browser. 8f9e94949
131 |
132 | - Added new variable ~forge-bug-reference-remote-files~. #703
133 |
134 | * v0.4.4 2024-10-01
135 |
136 | Thoughts and whitespace.
137 |
138 | * v0.4.3 2024-09-04
139 |
140 | - Fixed tracking a new repository using ~forge-pull~. a839eaeaa
141 |
142 | - Fixed type of ~forge--topics-spec~'s ~state~ slot. 5ee14bfbd
143 |
144 | - Fixed several issues with ~forge--topics-list-command~. 1b4eaaedb, e94f6a37d
145 |
146 | - When pulling API data outside a Git repository, do not try pull Git data,
147 | and make sure the buffer is refreshed regardless. #695
148 |
149 | * v0.4.2 2024-09-01
150 |
151 | - Updated tooling.
152 |
153 | * v0.4.1 2024-08-14
154 |
155 | - ~forge-add-repository~ now guides the user to set ~forge.remote~ and provides
156 | pointers to the relevant documentation, when additional configuration is
157 | required, before a repository can be added to the database. 834c81492 et al.
158 |
159 | - ~forge-add-repository~ and ~forge-pull~ used to error for repository not hosted
160 | on a known host or when called outside any Git repository.
161 |
162 | - Ssh host aliases did not get resolved as intended. #689
163 |
164 | - In ~forge-notifications-mode~ buffers ~C-c C-c~ used to error. 7bcdffc75
165 |
166 | - The "dwim" value displayed for ~forge.remote~ was inaccurate. 6ec5ad186
167 |
168 | - Added new "Setup a Partially Supported Host" section to manual and fixed
169 | various typos. 4f6e58b4c
170 |
171 | - Fixed inaccurate information and typos in the manual and usage messages.
172 | aa72a4d13 et al.
173 |
174 | * v0.4.0 2024-08-08
175 |
176 | This is the biggest Forge release so far, consisting of more than 650 commits
177 | created over the course of more than two years. I am not able to load all that
178 | into working memory, and many parts of the code have received several rounds of
179 | improvements, so this changelog entry uses broader strokes than usual.
180 |
181 | - This release pays off a large amount of technical debt. Many of the changes
182 | and additions below were only possible thanks to that effort, as are upcoming
183 | additions.
184 |
185 | - Which topics are displayed in the current buffer can now be changed, using
186 | the new prefix command ~forge-topics-menu~, available on ~N m f~. This command
187 | is available in any buffer that lists topics, including Magit status buffers.
188 |
189 | Previously topic filtering relied on dedicated commands (which listed a
190 | hard-coded subset in a separate buffer) and functions (which inserted a
191 | hard-coded subset in a separate section in the status buffer). Most of
192 | these commands and functions have been removed.
193 |
194 | The default filters can be customized using the new
195 | ~forge-list-buffer-default-topic-filters~ and
196 | ~forge-status-buffer-default-topic-filters~ options. If you really want to
197 | insert additional hard-coded sets of topics in dedicated sections in the
198 | status buffer, you can still define them yourself, with the help of the new
199 | helper function ~forge-insert-topics~.
200 |
201 | - Dedicated buffers used to list topics now use a major mode derived from
202 | ~magit-mode~, instead of from ~tabulated-list-mode~. This makes it possible to
203 | remove a lot of duplication (because these buffers now use the same code as
204 | the topic list sections, displayed in the status buffer), and makes adding
205 | new features more feasible.
206 |
207 | - ~forge-dispatch~ and the newly added menu commands (such as the already
208 | mentioned ~transient-topics-menu~) now provide bindings to switch to any of the
209 | other menus. Similarly they provide bindings to switch to list buffers.
210 |
211 | This should make it easy to discover the new commands, and reduces the need
212 | to memorize new key bindings. It is sufficient to remember that ~N~ invokes
213 | ~forge-dispach~, and to then browse the other menus from there. That being
214 | said, more efficient, but harder to remember, bindings are also available,
215 | such as:
216 |
217 | - The new prefix command ~forge-topic-menu~, now provides the most convenient way
218 | to edit an existing topic. When point is on a topic, it can be invoked using
219 | ~C-~. As is always the case in Magit, ~RET~ visits the thing at point in
220 | a separate buffer. In the case of topics, ~C-u RET~ does both; it displays the
221 | buffer and the menu.
222 |
223 | - The parts of the Github API, that one has to use when syncing the private
224 | topic status, are truly abysmal. When I first created Forge, I figured that
225 | something so fundamentally broken would surely be fixed within a few months,
226 | and decided to wait until that was done.
227 |
228 | I was wrong, five years later nothing has changed, and I had no choice but to
229 | put in a lot of effort to implement workarounds, to achieve something that is
230 | worse than what could be trivially achieved, if the API were merely bad.
231 |
232 | Most frustratingly the ternary unread/pending/done is represented in API
233 | responses using a boolean. That obviously puts limits on the accuracy one
234 | can achieve in a third-party client. While that is the worst defect, it is
235 | just the tip of the iceberg.
236 |
237 | - All the possible values for the public "state" and the private "status" of
238 | topics are now supported.
239 |
240 | The public state basically answers the question whether a topic has been
241 | closed yet, and if so, for what reason. The state can be one of ~open~,
242 | ~completed~ and ~unplanned~ for issues, and ~open~, ~merged~ and ~rejected~ for
243 | pull-requests.
244 |
245 | The private status answers the questions whether /you/ have seen the latest
246 | changes yet, that someone else made to it, and when that is the case, whether
247 | you have additionally decided that you are "done" with that topic.
248 |
249 | Due to the defects of the Github API mentioned above, the distinction between
250 | the ~pending~ and ~done~ statuses of a topic cannot be synchronized with Github.
251 | So if you use both Forge and the web interface, you will sadly have to perform
252 | the "mark as done" action twice.
253 |
254 | - By default Forge now lists "active" topics, i.e., topics whose public state is
255 | ~open~ and/or whose private status is ~unread~ or ~pending~. In other words ~active~
256 | topics are those that likely still require your attention.
257 |
258 | - At least Emacs 27.1 is required now. Several dependencies have bumped their
259 | respective minimal requirement, so I had no choice in the matter, but to be
260 | honest, I am not unhappy about it.
261 |
262 | - EmacSQL 4.0.0 is required now, which automatically uses the best available SQL
263 | backend. The new backend, which utilizes the built-in support (added in Emacs
264 | 29.1) is preferred. When using an older Emacs version, or when Emacs unwisely
265 | was compiled without SQLite support, then a different new backend is used.
266 | That backend uses the C module provided by the ~sqlite3~ package, which you have
267 | to install explicitly. If the module also isn't available, the legacy backend
268 | is used as a last resort. That backend is less reliable and much slower than
269 | the newer alternatives, and is going to be removed from EmacSQL in a not so
270 | distant future.
271 |
272 | - It is now possible to add repositories to the local database, without first
273 | cloning the respective Git repositories, using the same command used to add
274 | the current Git repository. That command, ~forge-add-repository~, now also
275 | offers to fetch only individual topics, or all topics that were modified
276 | since a cut-off date of the user's choosing, instead of all topics.
277 |
278 | - A project's topics can now be listed, visited and modified even if no local
279 | clone of the respective Git repository exists. One way to navigate to such
280 | a project's topics is to list all repositories using ~N l r~ and then press
281 | ~RET~, while point is on the repository in question.
282 |
283 | - Added new transient menu commands ~forge-topic-menu~, ~forge-topics-menu~,
284 | ~forge-topic-state-menu~, ~forge-topic-status-menu~, ~forge-repositories-menu~,
285 | ~forge-configure~, ~forge-post-dispatch~ and ~forge-notifications-menu~, and
286 | converted ~forge-add-repository~ to a menu command.
287 |
288 | - Added new commands ~forge-add-some-repository~, ~forge-browse~,
289 | ~forge-browse-this-repository~, ~forge-browse-this-topic~,
290 | ~forge-checkout-this-pullreq~, ~forge-forge.graphqlItemLimit~,
291 | ~forge-issue-state-set-completed~, ~forge-issue-state-set-unplanned~,
292 | ~forge-list-global-issues~, ~forge-list-global-pullreqs~,
293 | ~forge-list-global-topics~, ~forge-menu-quit-list~,
294 | ~forge-notifications-display-all~, ~forge-notifications-display-done~,
295 | ~forge-notifications-display-inbox~, ~forge-notifications-display-saved~,
296 | ~forge-notifications-style-flat~, ~forge-notifications-style-nested~,
297 | ~forge-post-toggle-draft~, ~forge-pull-this-topic~,
298 | ~forge-pullreq-state-set-merged~, ~forge-pullreq-state-set-rejected~,
299 | ~forge-read-topic-lift-limit~, ~forge-refresh-buffer~,
300 | ~forge-rename-default-branch~, ~forge-toggle-topic-legend~,
301 | ~forge-edit-topic-state~, ~forge-topic-state-set-open~,
302 | ~forge-topic-status-set-done~, ~forge-topic-status-set-pending~,
303 | ~forge-topic-status-set-unread~, ~forge-topic-toggle-draft~,
304 | ~forge-topic-toggle-saved~, ~forge-topics-all-types~, ~forge-topics-filter-active~,
305 | ~forge-topics-filter-assignee~, ~forge-topics-filter-author~,
306 | ~forge-topics-filter-issues~, ~forge-topics-filter-labels~,
307 | ~forge-topics-filter-marks~, ~forge-topics-filter-milestone~,
308 | ~forge-topics-filter-pullreqs~, ~forge-topics-filter-reviewer~,
309 | ~forge-topics-filter-saved~, ~forge-topics-filter-state-completed~,
310 | ~forge-topics-filter-state-open~, ~forge-topics-filter-state-unplanned~,
311 | ~forge-topics-filter-status-done~, ~forge-topics-filter-status-inbox~,
312 | ~forge-topics-filter-status-pending~, ~forge-topics-filter-status-unread~,
313 | ~forge-topics-group~, ~forge-topics-set-limit~, ~forge-topics-set-order~,
314 | ~forge-topics-ungroup~, ~forge-visit-this-repository~ and ~forge-visit-this-topic~.
315 |
316 | - Added new options ~forge-buffer-draft-p~, ~forge-limit-topic-choices~,
317 | ~forge-list-buffer-default-topic-filters~, ~forge-repository-list-columns~,
318 | ~forge-repository-list-mode-hook~, ~forge-status-buffer-default-topic-filters~
319 | and ~forge-topic-repository-slug-width~; and remove old options
320 | ~forge-database-connector~, ~forge-topic-list-mode-hook~, ~forge-topic-list-order~,
321 | ~forge-topic-list-limit~ and forge-pull-notifications.
322 |
323 | - Added new faces ~forge-dimmed~, ~forge-issue-completed~, ~forge-issue-open~,
324 | ~forge-issue-unplanned~, ~forge-pullreq-merged~, ~forge-pullreq-open~,
325 | ~forge-suffix-active-and-implied~, ~forge-suffix-active~, ~forge-suffix-implied~,
326 | ~forge-topic-done~, ~forge-topic-header-line~, ~forge-topic-pending~,
327 | ~forge-topic-slug-completed~, ~forge-topic-slug-open~, ~forge-topic-slug-saved~,
328 | ~forge-topic-slug-unplanned~, ~forge-topic-slug-unread~ and
329 | ~forge-pullreq-rejected~. Some of them are approximate replacements for the
330 | removed faces ~forge-topic-closed~, ~forge-topic-merged~, ~forge-topic-open~ and
331 | ~forge-topic-unmerged~.
332 |
333 | - Added new Git variable ~forge.graphqlItemLimit~. Ghub now fetches fewer items
334 | at once by default, but if you repeatedly get ~HTTP Error 502, "Bad gateway"~,
335 | when pulling API data for some repository, then limiting this to below 50
336 | is likely to help (but results in more requests and slows down pulling.)
337 |
338 | - If Forge cannot access its database, it disables itself, to keep Magit usable.
339 |
340 | - The essential function ~forge-get-repository~ has undergone several rounds of
341 | improvements and now much better serves the diverse needs of its callers.
342 |
343 | - When the user has to select a topic using completion, they are initially only
344 | offered open topics to select from, but by pressing ~+~ the choices can be
345 | extended to include all topics.
346 |
347 | Also included are many other new features, improvements and bugfixes.
348 |
349 | * v0.3.2 2022-03-07
350 |
351 | - The command ~forge-toggle-display-in-status-buffer~ now affects all
352 | relevant sections. #470
353 |
354 | - It is possible to create a pull-request from an existing issue
355 | again. #473
356 |
357 | * v0.3.1 2022-02-16
358 |
359 | - Added several existing commands to ~forge-dispatch~.
360 |
361 | - Added new option ~forge-add-default-sections~, which can be set to ~nil~
362 | to prevent Forge from adding bindings to Magit keymaps and transient
363 | prefix commands.
364 |
365 | - Added new command ~forge-browse-repository~. #443
366 |
367 | - Added new variable ~forge-format-avatar-function~. #447
368 |
369 | - Added support for the ~sqlite-builtin~ and ~sqlite-module~ backends.
370 | See https://github.com/skeeto/emacsql/pull/86.
371 |
372 | - Added new option ~forge-checkout-worktree-read-directory-function~.
373 | #463
374 |
375 | - Also included are many other improvements, updated documentation and
376 | bugfixes.
377 |
378 | * v0.3.0 2021-10-14
379 |
380 | - Many actions that were surprisingly slow are much faster now,
381 | because an embarrassing bottleneck was removed in Closql v1.2.0.
382 |
383 | - Added new option ~forge-database-connector~ allowing the use of other
384 | database connector libraries beside ~emacsql-sqlite~ (currently only
385 | ~emacsql-libsqlite3~ (experimental) and ~emacsql-sqlite3~ (discouraged)).
386 | bae6a527, 21720580
387 |
388 | - Commands that take a topic or repository as argument now expect an
389 | object/row ID instead of an object or a number. Objects are not
390 | suitable as interactive arguments because their printed
391 | representation would be presented to the user when using
392 | ~repeat-complex-command~, and because they might not reflect the
393 | current state when used like that. Numbers would be more readable
394 | and actually meaningful to humans, but additionally they would be
395 | ambiguous. Non-interactive functions continue to expect objects
396 | as arguments. #368
397 |
398 | - Some essential key bindings that were somewhat randomly selected
399 | during initial development have now been changed for consistency,
400 | which I always intended to do, but did not get around to do until
401 | now. ~forge-dispatch~ is now bound to ~N~ instead of ~'~ and Forge's
402 | bindings in ~magit-fetch~ and ~magit-pull~ now use ~N~ and ~n~ instead of
403 | ~Y~ and ~y~. ~N~ was chosen because it was one of the last alphabetic
404 | keys available at the top-level in Magit. 8c9614e3 et al.
405 |
406 | - Added new command ~forge-merge~ for merging pull-requests using the
407 | forge's API, which I recommend you only use if someone forces you
408 | to do use the API. 3112aded
409 |
410 | - Added support for following the links that some projects on Github
411 | display alongside issue templates. 46d5f253
412 |
413 | - Setting the new Git variable ~forge.autoPull~ to false disables
414 | pulling Git data whenever API data is fetched. This may be useful
415 | in active mono-repos where there is always something new (but likely
416 | irrelevant) to pull. #362
417 |
418 | - Added new commands ~forge-list-labeled-pullreqs~ and
419 | ~forge-list-labeled-issues~. a3e6f8aa
420 |
421 | - Starting with Emacs 28 ~bug-references~ is automatically configure for
422 | repositories cloned from many Git forges, so Forge no longer has to
423 | do it. #283, #412
424 |
425 | - It is possible to fetch only select topics of a repository, which is
426 | useful if that happens to be large and/or if you are only interested
427 | in a select few topics (such as the one you are about to open).
428 | ~forge-pull~ learned to fetch information about the repository itself
429 | even when configured to only fetch certain topics. #382
430 |
431 | - Added the ~forge-browse-*~ commands to ~forge-dispatch~. #422
432 |
433 | - Also included are several other improvements, updated documentation
434 | and bugfixes.
435 |
436 | * v0.2.1 2021-06-17
437 |
438 | - Adjusted to breaking changes in EIEIO in Emacs 28.
439 |
440 | * v0.2.0 2021-05-25
441 |
442 | - Second release.
443 |
444 | - Features and bugfixes.
445 |
446 | - I haven't been keeping this list updated and don't feel like going
447 | through hundreds of commits now. Sorry, maybe next time.
448 |
449 | * v0.1.0 2018-12-19
450 |
451 | - Initial beta release.
452 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | -include config.mk
2 | include default.mk
3 |
4 | .PHONY: lisp docs
5 |
6 | all: lisp docs
7 |
8 | help:
9 | $(info make all - generate lisp and manual)
10 | $(info make lisp - generate byte-code and autoloads)
11 | $(info make redo - re-generate byte-code and autoloads)
12 | $(info make docs - generate all manual formats)
13 | $(info make redo-docs - re-generate all manual formats)
14 | $(info make texi - generate texi manual)
15 | $(info make info - generate info manual)
16 | $(info make html - generate html manual file)
17 | $(info make html-dir - generate html manual directory)
18 | $(info make pdf - generate pdf manual)
19 | $(info make publish - publish snapshot manuals)
20 | $(info make release - publish release manuals)
21 | $(info make stats - generate statistics)
22 | $(info make stats-upload - publish statistics)
23 | $(info make clean - remove most generated files)
24 | @printf "\n"
25 |
26 | lisp:
27 | @$(MAKE) -C lisp lisp
28 | redo:
29 | @$(MAKE) -C lisp clean lisp
30 |
31 | docs:
32 | @$(MAKE) -C docs docs
33 | redo-docs:
34 | @$(MAKE) -C docs redo-docs
35 | texi:
36 | @$(MAKE) -C docs texi
37 | info:
38 | @$(MAKE) -C docs info
39 | html:
40 | @$(MAKE) -C docs html
41 | html-dir:
42 | @$(MAKE) -C docs html-dir
43 | pdf:
44 | @$(MAKE) -C docs pdf
45 |
46 | publish:
47 | @$(MAKE) -C docs publish
48 | release:
49 | @$(MAKE) -C docs release
50 |
51 | stats:
52 | @$(MAKE) -C docs stats
53 | stats-upload:
54 | @$(MAKE) -C docs stats-upload
55 |
56 | clean:
57 | @$(MAKE) -C lisp clean
58 | @$(MAKE) -C docs clean
59 |
--------------------------------------------------------------------------------
/README.org:
--------------------------------------------------------------------------------
1 | ** Work with Git forges from the comfort of Magit
2 |
3 | Work with Git forges, such as Github and Gitlab, from the comfort
4 | of Magit and the rest of Emacs.
5 |
6 | [[http://readme.emacsair.me/forge-status.png]]
7 |
8 | [[http://readme.emacsair.me/forge-topic.png]]
9 |
10 | Please see the [[https://magit.vc/manual/forge][manual]] and the [[https://emacsair.me/2018/12/19/forge-0.1][announcement]] for more information.
11 |
12 | #+html: