Appearance
Git and pull requests
Pomelo commits, pushes and reviews across every repo of a workspace at once.
The Git panel
The Git panel works on all of the workspace's repos at once, in three tabs:
- Changes - the files the branch changed, Staged and Not staged, by repo. Type a message and Commit makes one commit per repo that has staged files, all with the same message; Amend amends them. The overflow menu has Stash All, Stash Pop, Discard Tracked Changes, the commit options Amend, Signoff and Skip Hooks, and Pull, Push and Fetch All; the view options show the files By Repo or as One Timeline, as a tree or a list.
- Remote - per repo, what is Not pushed, Not published or On origin, not pulled, the files changed on the branch, and the branch's pull request: its title, checks, reviews, and Merge conflict when it has one. Create Pull Request opens GitHub's page for a pushed branch.
- History - the branch's commits.
The sync button follows the branch: Publish, Push, Pull, Sync or Up to date. Right-click a file for Open Diff, Open File, Mark as Reviewed, Copy Path, Copy Relative Path and Discard Uncommitted Changes, and a repo's remote for Fetch, Pull, Pull (Rebase), Push and Force Push.
Changes (5)Remote (1)History
View Diff+61 -58Stage All
apion feat-login
Staged2
sessions_controller.rbapp/controllers+12 -1
sessions_controller_test.rbtest/controllers+38
Not staged1
development.rbconfig/environments+2
webon feat-login
Not staged2
Login.tsxsrc/pages+9 -3
LegacyForm.tsxsrc/components -54
feat-loginin 2 of 21 to push
Throttle repeated sign-in attempts
1 commit in api (2 files)Commit
View Diff opens the branch's whole diff with every hunk expanded. The two buttons in its tab bar switch between unified and split (side-by-side, when the pane has room for it); the choice is kept for every diff and matches Split Diff in the editor's menu.
1class SessionsController < ApplicationController1class SessionsController < ApplicationController
2 MAX_ATTEMPTS = 5
23
3 def create4 def create
4 user = User.find_by(email: params[:email])5 user = User.find_by(email: params[:email])
6
7 if throttled?(params[:email])
8 return render json: { error: "too many attempts" }, status: :too_many_requests
9 end
510
6 if user && user.authenticate(params[:password])11 if user&.authenticate(params[:password])
7 session[:user_id] = user.id12 session[:user_id] = user.id
8 remember(user)
9 end13 end
Pull requests
PR data comes from GitHub's API directly, no gh CLI needed. Diffs and changed files are read from your local worktrees. Pomelo reads the token from GH_TOKEN or GITHUB_TOKEN in its environment, otherwise from the project's secret named github: add it in the Services panel's Secrets tab, for example with the value of gh auth token. The token only needs to read the repositories' pull requests. After a push, the Git panel offers Create Pull Request, which opens GitHub's page.
