forked from mirrors/jj
cli: allow pushing open commits
Since we're thinking of removing the concept of open and closed commits, we can't use that open/closed distinction to decide to not push some commits.
This commit is contained in:
parent
8667e374b8
commit
fc4b109e5b
3 changed files with 5 additions and 57 deletions
|
@ -30,6 +30,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* The [`$NO_COLOR` environment variable](https://no-color.org/) no longer
|
* The [`$NO_COLOR` environment variable](https://no-color.org/) no longer
|
||||||
overrides the `ui.color` configuration if explicitly set.
|
overrides the `ui.color` configuration if explicitly set.
|
||||||
|
|
||||||
|
* `jj git push` no longer aborts if you attempt to push an open commit (but it
|
||||||
|
now aborts if a commit does not have a description).
|
||||||
|
|
||||||
### New features
|
### New features
|
||||||
|
|
||||||
* `jj rebase` now accepts a `--branch/-b <revision>` argument, which can be used
|
* `jj rebase` now accepts a `--branch/-b <revision>` argument, which can be used
|
||||||
|
|
|
@ -5012,18 +5012,6 @@ fn cmd_git_push(
|
||||||
BranchPushAction::LocalConflicted => {}
|
BranchPushAction::LocalConflicted => {}
|
||||||
BranchPushAction::RemoteConflicted => {}
|
BranchPushAction::RemoteConflicted => {}
|
||||||
BranchPushAction::Update(update) => {
|
BranchPushAction::Update(update) => {
|
||||||
if let Some(new_target) = &update.new_target {
|
|
||||||
let new_target_commit = repo.store().get_commit(new_target)?;
|
|
||||||
// TODO: Should we also skip branches that have open commits as ancestors?
|
|
||||||
if new_target_commit.is_open() {
|
|
||||||
writeln!(
|
|
||||||
ui,
|
|
||||||
"Skipping branch '{}' since it points to an open commit.",
|
|
||||||
branch_name
|
|
||||||
)?;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
branch_updates.insert(branch_name.clone(), update);
|
branch_updates.insert(branch_name.clone(), update);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5123,17 +5111,7 @@ fn branch_updates_for_push(
|
||||||
"Branch {}@{} is conflicted",
|
"Branch {}@{} is conflicted",
|
||||||
branch_name, remote_name
|
branch_name, remote_name
|
||||||
))),
|
))),
|
||||||
BranchPushAction::Update(update) => {
|
BranchPushAction::Update(update) => Ok(Some(update)),
|
||||||
if let Some(new_target) = &update.new_target {
|
|
||||||
let new_target_commit = repo.store().get_commit(new_target)?;
|
|
||||||
if new_target_commit.is_open() {
|
|
||||||
return Err(CommandError::UserError(
|
|
||||||
"Won't push open commit".to_string(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(Some(update))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,7 @@
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use regex::Regex;
|
use crate::common::TestEnvironment;
|
||||||
|
|
||||||
use crate::common::{get_stderr_string, get_stdout_string, TestEnvironment};
|
|
||||||
|
|
||||||
pub mod common;
|
pub mod common;
|
||||||
|
|
||||||
|
@ -43,37 +41,6 @@ fn test_git_push_nothing() {
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_git_push_open() {
|
|
||||||
let (test_env, workspace_root) = set_up();
|
|
||||||
// When pushing everything, won't push an open commit even if there's a branch
|
|
||||||
// on it
|
|
||||||
test_env.jj_cmd_success(&workspace_root, &["branch", "create", "my-branch"]);
|
|
||||||
let stdout = test_env.jj_cmd_success(&workspace_root, &["git", "push"]);
|
|
||||||
insta::assert_snapshot!(stdout, @r###"
|
|
||||||
Skipping branch 'my-branch' since it points to an open commit.
|
|
||||||
Nothing changed.
|
|
||||||
"###);
|
|
||||||
|
|
||||||
// When pushing a specific branch, won't push it if it points to an open commit
|
|
||||||
let stderr =
|
|
||||||
test_env.jj_cmd_failure(&workspace_root, &["git", "push", "--branch", "my-branch"]);
|
|
||||||
insta::assert_snapshot!(stderr, @r###"
|
|
||||||
Error: Won't push open commit
|
|
||||||
"###);
|
|
||||||
// When pushing with `--change`, won't push if it points to an open commit
|
|
||||||
let assert = test_env
|
|
||||||
.jj_cmd(&workspace_root, &["git", "push", "--change", "my-branch"])
|
|
||||||
.assert();
|
|
||||||
let branch_pattern = Regex::new("push-[0-9a-f]+").unwrap();
|
|
||||||
insta::assert_snapshot!(branch_pattern.replace(&get_stdout_string(&assert), "<branch>"), @r###"
|
|
||||||
Creating branch <branch> for revision my-branch
|
|
||||||
"###);
|
|
||||||
insta::assert_snapshot!(get_stderr_string(&assert), @r###"
|
|
||||||
Error: Won't push open commit
|
|
||||||
"###);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_git_push_conflict() {
|
fn test_git_push_conflict() {
|
||||||
let (test_env, workspace_root) = set_up();
|
let (test_env, workspace_root) = set_up();
|
||||||
|
|
Loading…
Reference in a new issue