@@ -57,11 +57,18 @@ fn test_rename_worktree_branch_preservation() -> Result<()> {
5757
5858fn test_rename_in_repo (
5959 manager : & GitWorktreeManager ,
60- worktree_name : & str ,
61- branch_name : & str ,
60+ base_worktree_name : & str ,
61+ base_branch_name : & str ,
6262) -> Result < ( ) > {
63+ // Generate unique names
64+ let timestamp = std:: time:: SystemTime :: now ( )
65+ . duration_since ( std:: time:: UNIX_EPOCH ) ?
66+ . as_millis ( ) ;
67+ let worktree_name = format ! ( "{base_worktree_name}-{timestamp}" ) ;
68+ let branch_name = format ! ( "{base_branch_name}-{timestamp}" ) ;
69+
6370 // Create worktree
64- manager. create_worktree_with_new_branch ( worktree_name, branch_name, config:: MAIN_BRANCH ) ?;
71+ manager. create_worktree_with_new_branch ( & worktree_name, & branch_name, config:: MAIN_BRANCH ) ?;
6572
6673 // Verify initial state
6774 let worktrees = manager. list_worktrees ( ) ?;
@@ -78,32 +85,36 @@ fn test_rename_in_repo(
7885
7986 // Rename worktree
8087 let new_name = format ! ( "{worktree_name}-renamed" ) ;
81- let result = manager. rename_worktree ( worktree_name, & new_name) ;
88+ let result = manager. rename_worktree ( & worktree_name, & new_name) ;
8289
8390 match result {
8491 Ok ( new_path) => {
8592 println ! ( "\n Rename succeeded, new path: {new_path:?}" ) ;
8693
87- // Check state after rename
94+ // Check state after rename - now look for new display name
8895 let worktrees_after = manager. list_worktrees ( ) ?;
8996 let wt_after = worktrees_after
9097 . iter ( )
91- . find ( |w| w. name == worktree_name )
92- . expect ( "Worktree should still exist" ) ;
98+ . find ( |w| w. name == new_name )
99+ . expect ( "Worktree should exist with new name " ) ;
93100
94101 println ! ( "\n After rename:" ) ;
95102 println ! ( " Name: {}" , wt_after. name) ;
96103 println ! ( " Branch: {}" , wt_after. branch) ;
97104 println ! ( " Path: {:?}" , wt_after. path) ;
98105
99- // Current behavior: branch becomes "unknown" because path is not updated
100- // Expected behavior: branch should remain the same
101- if wt_after. branch == "unknown" {
102- println ! ( " ⚠️ Branch became 'unknown' - this is the bug!" ) ;
106+ // With our fix, branch information should be preserved
107+ if wt_after. branch == branch_name {
108+ println ! ( " ✓ Branch preserved correctly!" ) ;
109+ } else if wt_after. branch == "unknown" {
110+ println ! ( " ⚠️ Branch became 'unknown' - unexpected!" ) ;
103111 println ! ( " Expected: Branch should be '{branch_name}'" ) ;
104112 } else {
105- println ! ( " ✓ Branch preserved correctly!" ) ;
113+ println ! ( " ? Branch changed to: {}" , wt_after . branch ) ;
106114 }
115+
116+ // Verify display name changed
117+ assert_eq ! ( wt_after. name, new_name) ;
107118 }
108119 Err ( e) => {
109120 println ! ( "\n Rename failed: {e}" ) ;
@@ -162,11 +173,16 @@ fn test_rename_worktree_in_bare_repo() -> Result<()> {
162173 let manager = GitWorktreeManager :: new_from_path ( & bare_repo_path) ?;
163174
164175 println ! ( "=== Test Case: Bare repository ===" ) ;
165- let worktree_name = "bare-test" ;
166- let branch_name = "bare-branch" ;
176+
177+ // Generate unique names for bare repo test
178+ let timestamp = std:: time:: SystemTime :: now ( )
179+ . duration_since ( std:: time:: UNIX_EPOCH ) ?
180+ . as_millis ( ) ;
181+ let worktree_name = format ! ( "bare-test-{timestamp}" ) ;
182+ let branch_name = format ! ( "bare-branch-{timestamp}" ) ;
167183
168184 // Create worktree (will be created outside the bare repo)
169- manager. create_worktree_with_new_branch ( worktree_name, branch_name, config:: MAIN_BRANCH ) ?;
185+ manager. create_worktree_with_new_branch ( & worktree_name, & branch_name, config:: MAIN_BRANCH ) ?;
170186
171187 // Verify and rename
172188 let worktrees = manager. list_worktrees ( ) ?;
@@ -180,22 +196,27 @@ fn test_rename_worktree_in_bare_repo() -> Result<()> {
180196 println ! ( " Branch: {}" , wt. branch) ;
181197
182198 // Rename
183- let new_name = "bare-renamed" ;
184- match manager. rename_worktree ( worktree_name, new_name) {
199+ let new_name = format ! ( "bare-renamed-{timestamp}" ) ;
200+ match manager. rename_worktree ( & worktree_name, & new_name) {
185201 Ok ( _) => {
186202 let worktrees_after = manager. list_worktrees ( ) ?;
187203 let wt_after = worktrees_after
188204 . iter ( )
189- . find ( |w| w. name == worktree_name )
190- . expect ( "Worktree should exist" ) ;
205+ . find ( |w| w. name == new_name ) // Look for new display name
206+ . expect ( "Worktree should exist with new name " ) ;
191207
192208 println ! ( "\n After rename:" ) ;
193209 println ! ( " Name: {}" , wt_after. name) ;
194210 println ! ( " Branch: {}" , wt_after. branch) ;
195211
196- if wt_after. branch == "unknown" {
212+ if wt_after. branch == branch_name {
213+ println ! ( " ✓ Branch preserved correctly in bare repo!" ) ;
214+ } else if wt_after. branch == "unknown" {
197215 println ! ( " ⚠️ Branch became 'unknown' in bare repo too!" ) ;
198216 }
217+
218+ // Verify display name changed
219+ assert_eq ! ( wt_after. name, new_name) ;
199220 }
200221 Err ( e) => println ! ( "Rename failed: {e}" ) ,
201222 }
0 commit comments