@@ -204,10 +204,19 @@ fn parse_dep_info<T>(dep_info: &str, cwd: T) -> Vec<String>
204
204
where T : AsRef < Path >
205
205
{
206
206
let cwd = cwd. as_ref ( ) ;
207
- let mut deps = dep_info. lines ( )
208
- // The first line is the dependencies on the dep file itself.
209
- . skip ( 1 )
210
- . filter_map ( |l| if l. is_empty ( ) { None } else { l. split ( ":" ) . next ( ) } )
207
+ // Just parse the first line, which should have the dep-info file and all
208
+ // source files.
209
+ let line = match dep_info. lines ( ) . next ( ) {
210
+ None => return vec ! [ ] ,
211
+ Some ( l) => l,
212
+ } ;
213
+ let pos = match line. find ( ": " ) {
214
+ None => return vec ! [ ] ,
215
+ Some ( p) => p,
216
+ } ;
217
+ let mut deps = line[ pos + 2 ..]
218
+ . split ( ' ' )
219
+ . map ( |s| s. trim ( ) ) . filter ( |s| !s. is_empty ( ) )
211
220
. map ( |s| cwd. join ( s) . to_string_lossy ( ) . into_owned ( ) )
212
221
. collect :: < Vec < _ > > ( ) ;
213
222
deps. sort ( ) ;
@@ -805,6 +814,37 @@ bar.rs:
805
814
parse_dep_info( & deps, "/bar/" ) ) ;
806
815
}
807
816
817
+ #[ cfg( windows) ]
818
+ #[ test]
819
+ fn test_parse_dep_info_cwd ( ) {
820
+ let deps = "foo: baz.rs abc.rs bar.rs
821
+
822
+ baz.rs:
823
+
824
+ abc.rs:
825
+
826
+ bar.rs:
827
+ " ;
828
+ assert_eq ! ( stringvec![ "foo/abc.rs" , "foo/bar.rs" , "foo/baz.rs" ] ,
829
+ parse_dep_info( & deps, "foo/" ) ) ;
830
+
831
+ assert_eq ! ( stringvec![ "c:/foo/bar/abc.rs" , "c:/foo/bar/bar.rs" , "c:/foo/bar/baz.rs" ] ,
832
+ parse_dep_info( & deps, "c:/foo/bar/" ) ) ;
833
+ }
834
+
835
+ #[ cfg( windows) ]
836
+ #[ test]
837
+ fn test_parse_dep_info_abs_paths ( ) {
838
+ let deps = "c:/foo/foo: c:/foo/baz.rs c:/foo/abc.rs c:/foo/bar.rs
839
+
840
+ c:/foo/baz.rs: c:/foo/bar.rs
841
+ c:/foo/abc.rs:
842
+ c:/foo/bar.rs:
843
+ " ;
844
+ assert_eq ! ( stringvec![ "c:/foo/abc.rs" , "c:/foo/bar.rs" , "c:/foo/baz.rs" ] ,
845
+ parse_dep_info( & deps, "c:/bar/" ) ) ;
846
+ }
847
+
808
848
fn mock_dep_info ( creator : & Arc < Mutex < MockCommandCreator > > , dep_srcs : & [ & str ] )
809
849
{
810
850
// Mock the `rustc --emit=dep-info` process by writing
0 commit comments