11using LibGit2Sharp . Tests . TestHelpers ;
22using System ;
33using System . Collections . Generic ;
4+ using System . IO ;
45using System . Linq ;
56using System . Text ;
67using System . Threading . Tasks ;
@@ -86,7 +87,7 @@ public void CanUnlockWorktree()
8687
8788 worktreeLocked . Unlock ( ) ;
8889
89- // not locked
90+ // unlocked
9091 var worktreeUnlocked = repo . Worktrees [ "logo" ] ;
9192 Assert . Equal ( "logo" , worktreeLocked . Name ) ;
9293 Assert . False ( worktreeUnlocked . IsLocked ) ;
@@ -101,15 +102,15 @@ public void CanLockWorktree()
101102 var repoPath = testpath ;
102103 using ( var repo = new Repository ( repoPath ) )
103104 {
104- // locked
105+ // unlocked
105106 var worktreeUnlocked = repo . Worktrees [ "i-do-numbers" ] ;
106107 Assert . Equal ( "i-do-numbers" , worktreeUnlocked . Name ) ;
107108 Assert . False ( worktreeUnlocked . IsLocked ) ;
108109 Assert . Null ( worktreeUnlocked . LockReason ) ;
109110
110111 worktreeUnlocked . Lock ( "add a lock" ) ;
111112
112- // not locked
113+ // locked
113114 var worktreeLocked = repo . Worktrees [ "i-do-numbers" ] ;
114115 Assert . Equal ( "i-do-numbers" , worktreeLocked . Name ) ;
115116 Assert . True ( worktreeLocked . IsLocked ) ;
@@ -131,5 +132,136 @@ public void CanGetRepositoryForWorktree()
131132 Assert . NotNull ( worktreeRepo ) ;
132133 }
133134 }
135+
136+ [ Fact ]
137+ public void CanPruneUnlockedWorktree ( )
138+ {
139+ var repoPath = SandboxWorktreeTestRepo ( ) ;
140+ using ( var repo = new Repository ( repoPath ) )
141+ {
142+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
143+
144+ // unlocked
145+ var worktreeUnlocked = repo . Worktrees [ "i-do-numbers" ] ;
146+ Assert . Equal ( "i-do-numbers" , worktreeUnlocked . Name ) ;
147+ Assert . False ( worktreeUnlocked . IsLocked ) ;
148+
149+ Assert . True ( repo . Worktrees . Prune ( worktreeUnlocked ) ) ;
150+
151+ Assert . Single ( repo . Worktrees ) ;
152+ }
153+ }
154+
155+ [ Fact ]
156+ public void CanNotPruneLockedWorktree ( )
157+ {
158+ var repoPath = SandboxWorktreeTestRepo ( ) ;
159+ using ( var repo = new Repository ( repoPath ) )
160+ {
161+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
162+
163+ // locked
164+ var worktreeUnlocked = repo . Worktrees [ "logo" ] ;
165+ Assert . Equal ( "logo" , worktreeUnlocked . Name ) ;
166+ Assert . True ( worktreeUnlocked . IsLocked ) ;
167+
168+ Assert . Throws < LibGit2SharpException > ( ( ) => repo . Worktrees . Prune ( worktreeUnlocked ) ) ;
169+ }
170+ }
171+
172+ [ Fact ]
173+ public void CanUnlockThenPruneLockedWorktree ( )
174+ {
175+ var repoPath = SandboxWorktreeTestRepo ( ) ;
176+ using ( var repo = new Repository ( repoPath ) )
177+ {
178+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
179+
180+ // locked
181+ var worktreeLocked = repo . Worktrees [ "logo" ] ;
182+ Assert . Equal ( "logo" , worktreeLocked . Name ) ;
183+ Assert . True ( worktreeLocked . IsLocked ) ;
184+
185+ worktreeLocked . Unlock ( ) ;
186+
187+ repo . Worktrees . Prune ( worktreeLocked ) ;
188+
189+ Assert . Single ( repo . Worktrees ) ;
190+ }
191+ }
192+
193+ [ Fact ]
194+ public void CanForcePruneLockedWorktree ( )
195+ {
196+ var repoPath = SandboxWorktreeTestRepo ( ) ;
197+ using ( var repo = new Repository ( repoPath ) )
198+ {
199+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
200+
201+ // locked
202+ var worktreeLocked = repo . Worktrees [ "logo" ] ;
203+ Assert . Equal ( "logo" , worktreeLocked . Name ) ;
204+ Assert . True ( worktreeLocked . IsLocked ) ;
205+
206+ repo . Worktrees . Prune ( worktreeLocked , true ) ;
207+
208+ Assert . Single ( repo . Worktrees ) ;
209+ }
210+ }
211+
212+ [ Fact ]
213+ public void CanAddWorktree ( )
214+ {
215+ var repoPath = SandboxWorktreeTestRepo ( ) ;
216+ using ( var repo = new Repository ( repoPath ) )
217+ {
218+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
219+
220+ var name = "blah" ;
221+ var path = Path . Combine ( repo . Info . WorkingDirectory , @"..\worktrees" , name ) ;
222+ var worktree = repo . Worktrees . Add ( name , path , false ) ;
223+ Assert . Equal ( name , worktree . Name ) ;
224+ Assert . False ( worktree . IsLocked ) ;
225+
226+ Assert . Equal ( 3 , repo . Worktrees . Count ( ) ) ;
227+ }
228+ }
229+
230+ [ Fact ]
231+ public void CanAddLockedWorktree ( )
232+ {
233+ var repoPath = SandboxWorktreeTestRepo ( ) ;
234+ using ( var repo = new Repository ( repoPath ) )
235+ {
236+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
237+
238+ var name = "blah" ;
239+ var path = Path . Combine ( repo . Info . WorkingDirectory , @"..\worktrees" , name ) ;
240+ var worktree = repo . Worktrees . Add ( name , path , true ) ;
241+ Assert . Equal ( name , worktree . Name ) ;
242+ Assert . True ( worktree . IsLocked ) ;
243+
244+ Assert . Equal ( 3 , repo . Worktrees . Count ( ) ) ;
245+ }
246+ }
247+
248+ [ Fact ]
249+ public void CanAddWorktreeForCommittish ( )
250+ {
251+ var repoPath = SandboxWorktreeTestRepo ( ) ;
252+ using ( var repo = new Repository ( repoPath ) )
253+ {
254+ Assert . Equal ( 2 , repo . Worktrees . Count ( ) ) ;
255+
256+ var name = "blah" ;
257+ var committish = "diff-test-cases" ;
258+ var path = Path . Combine ( repo . Info . WorkingDirectory , @"..\worktrees" , name ) ;
259+ var worktree = repo . Worktrees . Add ( committish , name , path , false ) ;
260+ Assert . Equal ( name , worktree . Name ) ;
261+ Assert . False ( worktree . IsLocked ) ;
262+ Assert . Equal ( committish , worktree . WorktreeRepository . Head . FriendlyName ) ;
263+ Assert . Equal ( 3 , repo . Worktrees . Count ( ) ) ;
264+ }
265+ }
134266 }
135267}
0 commit comments