Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FR: Some jj next/prev improvements #2126

Closed
PhilipMetzger opened this issue Aug 21, 2023 · 4 comments
Closed

FR: Some jj next/prev improvements #2126

PhilipMetzger opened this issue Aug 21, 2023 · 4 comments
Labels
enhancement New feature or request polish🪒🐃 Make existing features more convenient and more consistent

Comments

@PhilipMetzger
Copy link
Contributor

Soon™, we'll have jj prev and jj next. Although the commands look eerily similar to git-branchless or sl next/prev, they do not understand dependant commits (stacks) and branches.

Notable missing features:

  • Prompting the user for resolution on merge commits for both prev and next
  • Moving onto a branch, like git-branchless does
  • Some notion of a stack
@PhilipMetzger PhilipMetzger added enhancement New feature or request polish🪒🐃 Make existing features more convenient and more consistent labels Aug 21, 2023
@arxanas
Copy link
Contributor

arxanas commented Aug 21, 2023

For reference, here is the Wiki page for the stack-related operation of git-branchless prev/next: https://github.com/arxanas/git-branchless/wiki/Command:-git-next,-git-prev#moving-to-the-top-or-bottom-of-the-stack. Switching to the bottom of a stack doesn't require understanding what a "stack" is (as it switches to a descendant head), but switching to the top of a stack does (as it switches to an ancestor root that is not an ancestor of the main branch).

I have sometimes wanted to move into the "next commit in <revset>". For example, I would want to move to the next commit that touched file foo, the next commit authored by me (or not me), or the next commit with a failing test. This could be done with revsets, strictly speaking, but so could jj prev/next in general. Maybe it's a common enough operation to consider adding to jj prev/next.

@arxanas
Copy link
Contributor

arxanas commented Aug 22, 2023

For example, I would want to move to the next commit that touched file foo, the next commit authored by me (or not me), or the next commit with a failing test.

Or — particularly useful in jj — to switch to the next commit with a conflict.

@rslabbert
Copy link
Contributor

I think supporting a config option for --edit as the default default would be useful and as far as I understand more closely matches the git-branchless/sapling behaviour. Selfishly it also more closely matches my workflow (having had next/prev aliased to `edit @+/@-'). Though maybe I should try and get used to the new + squash workflow instead.

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Oct 12, 2023
[0.10.0] - 2023-10-04

### Breaking changes

* A default revset-alias function `trunk()` now exists. If you previously defined
  your own `trunk()` alias it will continue to overwrite the built-in one.
  Check [revsets.toml](cli/src/config/revsets.toml) and [revsets.md](docs/revsets.md)
  to understand how the function can be adapted.

### New features

* The `ancestors()` revset function now takes an optional `depth` argument
  to limit the depth of the ancestor set. For example, use `jj log -r
  'ancestors(@, 5)` to view the last 5 commits.

* Support for the Watchman filesystem monitor is now bundled by default. Set
  `core.fsmonitor = "watchman"` in your repo to enable.

* You can now configure the set of immutable commits via
  `revset-aliases.immutable_heads()`. For example, set it to
  `"remote_branches() | tags()"` to prevent rewriting those those. Their
  ancestors are implicitly also immutable.

* `jj op log` now supports `--no-graph`.

* Templates now support an additional escape: `\0`. This will output a literal
  null byte. This may be useful for e.g.
  `jj log -T 'description ++ "\0"' --no-graph` to output descriptions only, but
  be able to tell where the boundaries are

* jj now bundles a TUI tool to use as the default diff and merge editors. (The
  previous default was `meld`.)

* `jj split` supports the `--interactive` flag. (This is already the default if
  no paths are provided.)

* `jj commit` accepts an optional list of paths indicating a subset of files to
  include in the first commit

* `jj commit` accepts the `--interactive` flag.

### Fixed bugs

### Contributors

Thanks to the people who made this release happen!

* Austin Seipp (@thoughtpolice)
* Emily Kyle Fox (@emilykfox)
* glencbz (@glencbz)
* Hong Shin (@honglooker)
* Ilya Grigoriev (@ilyagr)
* James Sully (@sullyj3)
* Martin von Zweigbergk (@martinvonz)
* Philip Metzger (@PhilipMetzger)
* Ruben Slabbert (@rslabbert)
* Vamsi Avula (@avamsi)
* Waleed Khan (@arxanas)
* Willian Mori (@wmrmrx))
* Yuya Nishihara (@yuja)
* Zachary Dremann (@Dr-Emann)


[0.9.0] - 2023-09-06

### Breaking changes

* The minimum supported Rust version (MSRV) is now 1.71.0.

* The storage format of branches, tags, and git refs has changed. Newly-stored
  repository data will no longer be loadable by older binaries.

* The `:` revset operator is deprecated. Use `::` instead. We plan to delete the
  `:` form in jj 0.15+.

* The `--allow-large-revsets` flag for `jj rebase` and `jj new` was replaced by
  a `all:` before the revset. For example, use `jj rebase -d 'all:foo-'`
  instead of `jj rebase --allow-large-revsets -d 'foo-'`.

* The `--allow-large-revsets` flag for `jj rebase` and `jj new` can no longer be
  used for allowing duplicate destinations. Include the potential duplicates
  in a single expression instead (e.g. `jj new 'all:x|y'`).

* The `push.branch-prefix` option was renamed to `git.push-branch-prefix`.

* The default editor on Windows is now `Notepad` instead of `pico`.

* `jj` will fail attempts to snapshot new files larger than 1MiB by default.
  This behavior can be customized with the `snapshot.max-new-file-size`
  config option.

* Author and committer signatures now use empty strings to represent unset
  names and email addresses. The `author`/`committer` template keywords and
  methods also return empty strings.
  Older binaries may not warn user when attempting to `git push` commits
  with such signatures.

* In revsets, the working-copy or remote symbols (such as `@`, `workspace_id@`,
  and `branch@remote`) can no longer be quoted as a unit. If a workspace or
  branch name contains whitespace, quote the name like `"branch name"@remote`.
  Also, these symbols will not be resolved as revset aliases or function
  parameters. For example, `author(foo@)` is now an error, and the revset alias
  `'revset-aliases.foo@' = '@'` will be failed to parse.

* The `root` revset symbol has been converted to function `root()`.

* The `..x` revset is now evaluated to `root()..x`, which means the root commit
  is no longer included.

* `jj git push` will now push all branches in the range `remote_branches()..@`
  instead of only branches pointing to `@` or `@-`.

* It's no longer allowed to create a Git remote named "git". Use `jj git remote
  rename` to rename the existing remote.
  [#1690](jj-vcs/jj#1690)

* Revset expression like `origin/main` will no longer resolve to a
  remote-tracking branch. Use `main@origin` instead.

### New features

* Default template for `jj log` now does not show irrelevant information
  (timestamp, empty, message placeholder etc.) about the root commit.

* Commit templates now support the `root` keyword, which is `true` for the root
  commit and `false` for every other commit.

* `jj init --git-repo` now works with bare repositories.

* `jj config edit --user` and `jj config set --user` will now pick a default
  config location if no existing file is found, potentially creating parent
  directories.

* `jj log` output is now topologically grouped.
  [#242](jj-vcs/jj#242)

* `jj git clone` now supports the `--colocate` flag to create the git repo
  in the same directory as the jj repo.

* `jj restore` gained a new option `--changes-in` to restore files
  from a merge revision's parents. This undoes the changes that `jj diff -r`
  would show.

* `jj diff`/`log` now supports `--tool <name>` option to generate diffs by
  external program. For configuration, see [the documentation](docs/config.md).
  [#1886](jj-vcs/jj#1886)

* A new experimental diff editor `meld-3` is introduced that sets up Meld to
  allow you to see both sides of the original diff while editing. This can be
  used with `jj split`, `jj move -i`, etc.

* `jj log`/`obslog`/`op log` now supports `--limit N` option to show the first
  `N` entries.

* Added the `ui.paginate` option to enable/disable pager usage in commands

* `jj checkout`/`jj describe`/`jj commit`/`jj new`/`jj squash` can take repeated
  `-m/--message` arguments. Each passed message will be combined into paragraphs
  (separated by a blank line)

* It is now possible to set a default description using the new
  `ui.default-description` option, to use when describing changes with an empty
  description.

* `jj split` will now leave the description empty on the second part if the
  description was empty on the input commit.

* `branches()`/`remote_branches()`/`author()`/`committer()`/`description()`
  revsets now support exact matching. For example, `branch(exact:main)`
  selects the branch named "main", but not "maint". `description(exact:"")`
  selects commits whose description is empty.

* Revsets gained a new function `mine()` that aliases `author(exact:"your_email")`.

* Added support for `::` and `..` revset operators with both left and right
  operands omitted. These expressions are equivalent to `all()` and `~root()`
  respectively.

* `jj log` timestamp format now accepts `.utc()` to convert a timestamp to UTC.

* templates now support additional string methods `.starts_with(x)`, `.ends_with(x)`
  `.remove_prefix(x)`, `.remove_suffix(x)`, and `.substr(start, end)`.

* `jj next` and `jj prev` are added, these allow you to traverse the history
  in a linear style. For people coming from Sapling and `git-branchles`
  see [#2126](jj-vcs/jj#2126) for
  further pending improvements.

* `jj diff --stat` has been implemented. It shows a histogram of the changes,
  same as `git diff --stat`. Fixes [#2066](jj-vcs/jj#2066)

* `jj git fetch --all-remotes` has been implemented. It fetches all remotes
  instead of just the default remote

### Fixed bugs

* Fix issues related to .gitignore handling of untracked directories
  [#2051](jj-vcs/jj#2051).

* `jj config set --user` and `jj config edit --user` can now be used outside of
  any repository.

* SSH authentication could hang when ssh-agent couldn't be reached
  [#1970](jj-vcs/jj#1970)

* SSH authentication can now use ed25519 and ed25519-sk keys. They still need
  to be password-less.

* Git repository managed by the repo tool can now be detected as a "colocated"
  repository.
  [#2011](jj-vcs/jj#2011)

### Contributors

Thanks to the people who made this release happen!

* Alexander Potashev (@aspotashev)
* Anton Bulakh (@necauqua)
* Austin Seipp (@thoughtpolice)
* Benjamin Brittain (@benbrittain)
* Benjamin Saunders (@Ralith)
* Christophe Poucet (@poucet)
* Emily Kyle Fox (@emilykfox)
* Glen Choo (@chooglen)
* Ilya Grigoriev (@ilyagr)
* Kevin Liao (@kevincliao)
* Linus Arver (@listx)
* Martin Clausen (@maacl)
* Martin von Zweigbergk (@martinvonz)
* Matt Freitas-Stavola (@mbStavola)
* Oscar Bonilla (@ob)
* Philip Metzger (@PhilipMetzger)
* Piotr Kufel (@qfel)
* Preston Van Loon (@prestonvanloon)
* Tal Pressman (@talpr)
* Vamsi Avula (@avamsi)
* Vincent Breitmoser (@Valodim)
* Vladimir (@0xdeafbeef)
* Waleed Khan (@arxanas)
* Yuya Nishihara (@yuja)
* Zachary Dremann (@Dr-Emann)
@torquestomp torquestomp self-assigned this Jan 19, 2024
torquestomp added a commit to torquestomp/jj that referenced this issue Jan 19, 2024
torquestomp added a commit to torquestomp/jj that referenced this issue Jan 19, 2024
torquestomp added a commit to torquestomp/jj that referenced this issue Jan 22, 2024
torquestomp added a commit to torquestomp/jj that referenced this issue Jan 22, 2024
torquestomp added a commit that referenced this issue Jan 22, 2024
@torquestomp torquestomp removed their assignment Jan 22, 2024
PhilipMetzger added a commit that referenced this issue Mar 7, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126
PhilipMetzger added a commit that referenced this issue Mar 7, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126
emesterhazy added a commit that referenced this issue Apr 5, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 5, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 5, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 5, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 7, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 8, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 8, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
emesterhazy added a commit that referenced this issue Apr 8, 2024
Before this commit `jj prev` fails if the current working copy commit is a
merge commit. After this commit it will prompt the user to choose the ancestor
they want to select.

#2126
PhilipMetzger added a commit that referenced this issue Apr 29, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126
PhilipMetzger added a commit that referenced this issue Apr 29, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126
PhilipMetzger added a commit that referenced this issue May 12, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 12, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: noahmayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 12, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 12, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 15, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 15, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 18, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 18, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 24, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue May 24, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue Jun 20, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue Jun 20, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue Jun 20, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
PhilipMetzger added a commit that referenced this issue Jun 20, 2024
This allows users to jump to the next conflict in the ancestors or children of 
the start commit.

Continues work on #2126

Co-Authored-By: Noah Mayr <[email protected]>
@PhilipMetzger
Copy link
Contributor Author

I'm going to close this, as it was the canonical issue for merge commit handling for prev/next and prev/next --conflict, if you disagree we can always reopen it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request polish🪒🐃 Make existing features more convenient and more consistent
Projects
None yet
Development

No branches or pull requests

4 participants