mirror of
https://github.com/hanzoai/dev.git
synced 2026-10-25 03:32:32 +00:00
Our history is just-every's with author emails rewritten, so the graphs are
disjoint and git finds no merge base. Supplied one by hand: d1f1f51a41, the
just-every commit matching our Oct-2025 fork point (22 files apart). 9618
upstream commits, 7004 files, +1.81M/-159k, 37 conflicts.
Resolution:
- Upstream code where our side was the Oct-2025 prototype of a feature they
have since reimplemented 3-5x larger (agent_runs, browser_sessions,
history_cell/{agent,browser}, the vt100 harness and its snapshots).
- Upstream's config.rs module split (builder/defaults/sources/validation)
kept; zen5-coder and the provider-follows-model rule re-applied on top.
- Ours where the file IS the identity: README, package.json, postinstall,
release notes pipeline, integration-zed.
- Hybrid where upstream improved a file we had branded: updates.rs (their
release-repo migration, our hanzoai/dev), release.yml (their fail-fast npm
auth check, our package name), chatwidget.rs (their turn handling, our
HANZO_USER_KEY hint), exec human output (their 237 lines, our banner).
Superseded and dropped deliberately: our resume_command_name() coder-alias
hack — upstream's derive_resume_command_name() reads the invocation basename
generically, which yields "dev" for us.
LLM.md now records the real topology and the sync point; AGENTS.md and
CLAUDE.md are symlinks to it again. Single parent on purpose: adopting
jecode/main as a second parent would re-import 13,742 commits carrying the
upstream author emails a prior rewrite deliberately removed.
Version 0.2.188 -> 0.2.189.
Co-authored-by: Hanzo Dev <[email protected]>
85 lines
2.2 KiB
Rust
85 lines
2.2 KiB
Rust
use std::fs;
|
|
use tempfile::tempdir;
|
|
|
|
#[test]
|
|
fn test_apply_patch_cli_add_and_update() -> anyhow::Result<()> {
|
|
let tmp = tempdir()?;
|
|
let file = "cli_test.txt";
|
|
let absolute_path = tmp.path().join(file);
|
|
|
|
// 1) Add a file
|
|
let add_patch = format!(
|
|
r#"*** Begin Patch
|
|
*** Add File: {file}
|
|
+hello
|
|
*** End Patch"#
|
|
);
|
|
assert_cmd::cargo::cargo_bin_cmd!("apply_patch")
|
|
.arg(add_patch)
|
|
.current_dir(tmp.path())
|
|
.assert()
|
|
.success()
|
|
.stdout(format!("Success. Updated the following files:\nA {file}\n"));
|
|
assert_eq!(fs::read_to_string(&absolute_path)?, "hello\n");
|
|
|
|
// 2) Update the file
|
|
let update_patch = format!(
|
|
r#"*** Begin Patch
|
|
*** Update File: {file}
|
|
@@
|
|
-hello
|
|
+world
|
|
*** End Patch"#
|
|
);
|
|
assert_cmd::cargo::cargo_bin_cmd!("apply_patch")
|
|
.arg(update_patch)
|
|
.current_dir(tmp.path())
|
|
.assert()
|
|
.success()
|
|
.stdout(format!("Success. Updated the following files:\nM {file}\n"));
|
|
assert_eq!(fs::read_to_string(&absolute_path)?, "world\n");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_apply_patch_cli_stdin_add_and_update() -> anyhow::Result<()> {
|
|
let tmp = tempdir()?;
|
|
let file = "cli_test_stdin.txt";
|
|
let absolute_path = tmp.path().join(file);
|
|
|
|
// 1) Add a file via stdin
|
|
let add_patch = format!(
|
|
r#"*** Begin Patch
|
|
*** Add File: {file}
|
|
+hello
|
|
*** End Patch"#
|
|
);
|
|
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("apply_patch");
|
|
cmd.current_dir(tmp.path());
|
|
cmd.write_stdin(add_patch)
|
|
.assert()
|
|
.success()
|
|
.stdout(format!("Success. Updated the following files:\nA {file}\n"));
|
|
assert_eq!(fs::read_to_string(&absolute_path)?, "hello\n");
|
|
|
|
// 2) Update the file via stdin
|
|
let update_patch = format!(
|
|
r#"*** Begin Patch
|
|
*** Update File: {file}
|
|
@@
|
|
-hello
|
|
+world
|
|
*** End Patch"#
|
|
);
|
|
let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("apply_patch");
|
|
cmd.current_dir(tmp.path());
|
|
cmd.write_stdin(update_patch)
|
|
.assert()
|
|
.success()
|
|
.stdout(format!("Success. Updated the following files:\nM {file}\n"));
|
|
assert_eq!(fs::read_to_string(&absolute_path)?, "world\n");
|
|
|
|
Ok(())
|
|
}
|