@@ -736,48 +736,69 @@ fn check_repo_state(
736
736
gctx : & GlobalContext ,
737
737
opts : & PackageOpts < ' _ > ,
738
738
) -> CargoResult < Option < VcsInfo > > {
739
- if let Ok ( repo) = git2:: Repository :: discover ( p. root ( ) ) {
740
- if let Some ( workdir) = repo. workdir ( ) {
741
- debug ! ( "found a git repo at {:?}" , workdir) ;
742
- let path = p. manifest_path ( ) ;
743
- let path =
744
- paths:: strip_prefix_canonical ( path, workdir) . unwrap_or_else ( |_| path. to_path_buf ( ) ) ;
745
- if let Ok ( status) = repo. status_file ( & path) {
746
- if ( status & git2:: Status :: IGNORED ) . is_empty ( ) {
747
- debug ! (
748
- "found (git) Cargo.toml at {:?} in workdir {:?}" ,
749
- path, workdir
750
- ) ;
751
- let path_in_vcs = path
752
- . parent ( )
753
- . and_then ( |p| p. to_str ( ) )
754
- . unwrap_or ( "" )
755
- . replace ( "\\ " , "/" ) ;
756
- let Some ( git) = git ( p, src_files, & repo, & opts) ? else {
757
- // If the git repo lacks essensial field like `sha1`, and since this field exists from the beginning,
758
- // then don't generate the corresponding file in order to maintain consistency with past behavior.
759
- return Ok ( None ) ;
760
- } ;
761
- return Ok ( Some ( VcsInfo { git, path_in_vcs } ) ) ;
762
- }
763
- }
764
- gctx. shell ( ) . verbose ( |shell| {
765
- shell. warn ( format ! (
766
- "no (git) Cargo.toml found at `{}` in workdir `{}`" ,
767
- path. display( ) ,
768
- workdir. display( )
769
- ) )
770
- } ) ?;
771
- }
772
- } else {
739
+ let Ok ( repo) = git2:: Repository :: discover ( p. root ( ) ) else {
773
740
gctx. shell ( ) . verbose ( |shell| {
774
741
shell. warn ( format ! ( "no (git) VCS found for `{}`" , p. root( ) . display( ) ) )
775
742
} ) ?;
743
+ // No Git repo found. Have to assume it is clean.
744
+ return Ok ( None ) ;
745
+ } ;
746
+
747
+ let Some ( workdir) = repo. workdir ( ) else {
748
+ debug ! (
749
+ "no (git) workdir found for repo at `{}`" ,
750
+ repo. path( ) . display( )
751
+ ) ;
752
+ // No git workdir. Have to assume it is clean.
753
+ return Ok ( None ) ;
754
+ } ;
755
+
756
+ debug ! ( "found a git repo at `{}`" , workdir. display( ) ) ;
757
+ let path = p. manifest_path ( ) ;
758
+ let path = paths:: strip_prefix_canonical ( path, workdir) . unwrap_or_else ( |_| path. to_path_buf ( ) ) ;
759
+ let Ok ( status) = repo. status_file ( & path) else {
760
+ gctx. shell ( ) . verbose ( |shell| {
761
+ shell. warn ( format ! (
762
+ "no (git) Cargo.toml found at `{}` in workdir `{}`" ,
763
+ path. display( ) ,
764
+ workdir. display( )
765
+ ) )
766
+ } ) ?;
767
+ // No checked-in `Cargo.toml` found. This package may be irrelevant.
768
+ // Have to assume it is clean.
769
+ return Ok ( None ) ;
770
+ } ;
771
+
772
+ if !( status & git2:: Status :: IGNORED ) . is_empty ( ) {
773
+ gctx. shell ( ) . verbose ( |shell| {
774
+ shell. warn ( format ! (
775
+ "found (git) Cargo.toml ignored at `{}` in workdir `{}`" ,
776
+ path. display( ) ,
777
+ workdir. display( )
778
+ ) )
779
+ } ) ?;
780
+ // An ignored `Cargo.toml` found. This package may be irrelevant.
781
+ // Have to assume it is clean.
782
+ return Ok ( None ) ;
776
783
}
777
784
778
- // No VCS with a checked in `Cargo.toml` found, so we don't know if the
779
- // directory is dirty or not, thus we have to assume that it's clean.
780
- return Ok ( None ) ;
785
+ debug ! (
786
+ "found (git) Cargo.toml at `{}` in workdir `{}`" ,
787
+ path. display( ) ,
788
+ workdir. display( ) ,
789
+ ) ;
790
+ let path_in_vcs = path
791
+ . parent ( )
792
+ . and_then ( |p| p. to_str ( ) )
793
+ . unwrap_or ( "" )
794
+ . replace ( "\\ " , "/" ) ;
795
+ let Some ( git) = git ( p, src_files, & repo, & opts) ? else {
796
+ // If the git repo lacks essensial field like `sha1`, and since this field exists from the beginning,
797
+ // then don't generate the corresponding file in order to maintain consistency with past behavior.
798
+ return Ok ( None ) ;
799
+ } ;
800
+
801
+ return Ok ( Some ( VcsInfo { git, path_in_vcs } ) ) ;
781
802
782
803
fn git (
783
804
p : & Package ,
0 commit comments