@@ -527,6 +527,16 @@ public ContextMenu CreateContextMenuForUnstagedChanges()
527
527
528
528
e . Handled = true ;
529
529
} ;
530
+
531
+ var assumeUnchanged = new MenuItem ( ) ;
532
+ assumeUnchanged . Header = App . Text ( "FileCM.AssumeUnchanged" ) ;
533
+ assumeUnchanged . Icon = App . CreateMenuIcon ( "Icons.File.Ignore" ) ;
534
+ assumeUnchanged . IsVisible = change . WorkTree != Models . ChangeState . Untracked ;
535
+ assumeUnchanged . Click += ( _ , e ) =>
536
+ {
537
+ new Commands . AssumeUnchanged ( _repo . FullPath ) . Add ( change . Path ) ;
538
+ e . Handled = true ;
539
+ } ;
530
540
531
541
var history = new MenuItem ( ) ;
532
542
history . Header = App . Text ( "FileHistory" ) ;
@@ -538,24 +548,67 @@ public ContextMenu CreateContextMenuForUnstagedChanges()
538
548
e . Handled = true ;
539
549
} ;
540
550
541
- var assumeUnchanged = new MenuItem ( ) ;
542
- assumeUnchanged . Header = App . Text ( "FileCM.AssumeUnchanged" ) ;
543
- assumeUnchanged . Icon = App . CreateMenuIcon ( "Icons.File.Ignore" ) ;
544
- assumeUnchanged . IsEnabled = change . WorkTree != Models . ChangeState . Untracked ;
545
- assumeUnchanged . Click += ( _ , e ) =>
546
- {
547
- new Commands . AssumeUnchanged ( _repo . FullPath ) . Add ( change . Path ) ;
548
- e . Handled = true ;
549
- } ;
550
-
551
551
menu . Items . Add ( stage ) ;
552
552
menu . Items . Add ( discard ) ;
553
553
menu . Items . Add ( stash ) ;
554
554
menu . Items . Add ( patch ) ;
555
+ menu . Items . Add ( assumeUnchanged ) ;
555
556
menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
556
557
menu . Items . Add ( history ) ;
557
- menu . Items . Add ( assumeUnchanged ) ;
558
558
menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
559
+
560
+ if ( change . WorkTree == Models . ChangeState . Untracked )
561
+ {
562
+ var isRooted = change . Path . IndexOf ( '/' , StringComparison . Ordinal ) <= 0 ;
563
+ var addToIgnore = new MenuItem ( ) ;
564
+ addToIgnore . Header = App . Text ( "WorkingCopy.AddToGitIgnore" ) ;
565
+ addToIgnore . Icon = App . CreateMenuIcon ( "Icons.GitIgnore" ) ;
566
+
567
+ var singleFile = new MenuItem ( ) ;
568
+ singleFile . Header = App . Text ( "WorkingCopy.AddToGitIgnore.SingleFile" ) ;
569
+ singleFile . Click += ( _ , e ) =>
570
+ {
571
+ Commands . GitIgnore . Add ( _repo . FullPath , change . Path ) ;
572
+ e . Handled = true ;
573
+ } ;
574
+ addToIgnore . Items . Add ( singleFile ) ;
575
+
576
+ var byParentFolder = new MenuItem ( ) ;
577
+ byParentFolder . Header = App . Text ( "WorkingCopy.AddToGitIgnore.InSameFolder" ) ;
578
+ byParentFolder . IsVisible = ! isRooted ;
579
+ byParentFolder . Click += ( _ , e ) =>
580
+ {
581
+ Commands . GitIgnore . Add ( _repo . FullPath , Path . GetDirectoryName ( change . Path ) + "/" ) ;
582
+ e . Handled = true ;
583
+ } ;
584
+ addToIgnore . Items . Add ( byParentFolder ) ;
585
+
586
+ var extension = Path . GetExtension ( change . Path ) ;
587
+ if ( ! string . IsNullOrEmpty ( extension ) )
588
+ {
589
+ var byExtension = new MenuItem ( ) ;
590
+ byExtension . Header = App . Text ( "WorkingCopy.AddToGitIgnore.Extension" , extension ) ;
591
+ byExtension . Click += ( _ , e ) =>
592
+ {
593
+ Commands . GitIgnore . Add ( _repo . FullPath , "*" + extension ) ;
594
+ e . Handled = true ;
595
+ } ;
596
+ addToIgnore . Items . Add ( byExtension ) ;
597
+
598
+ var byExtensionInSameFolder = new MenuItem ( ) ;
599
+ byExtensionInSameFolder . Header = App . Text ( "WorkingCopy.AddToGitIgnore.ExtensionInSameFolder" , extension ) ;
600
+ byExtensionInSameFolder . IsVisible = ! isRooted ;
601
+ byExtensionInSameFolder . Click += ( _ , e ) =>
602
+ {
603
+ Commands . GitIgnore . Add ( _repo . FullPath , Path . GetDirectoryName ( change . Path ) + "/*" + extension ) ;
604
+ e . Handled = true ;
605
+ } ;
606
+ addToIgnore . Items . Add ( byExtensionInSameFolder ) ;
607
+ }
608
+
609
+ menu . Items . Add ( addToIgnore ) ;
610
+ menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
611
+ }
559
612
}
560
613
561
614
var copy = new MenuItem ( ) ;
0 commit comments