@@ -7,7 +7,7 @@ use std::env;
7
7
use std:: path:: Path ;
8
8
9
9
use chrono:: { TimeZone , Utc } ;
10
- use failure:: { bail, Error } ;
10
+ use failure:: { bail, Error , ResultExt } ;
11
11
use git2:: build:: RepoBuilder ;
12
12
use git2:: { Commit as Git2Commit , Repository } ;
13
13
use log:: debug;
@@ -34,13 +34,20 @@ fn lookup_rev<'rev>(repo: &'rev Repository, rev: &str) -> Result<Git2Commit<'rev
34
34
35
35
fn get_repo ( ) -> Result < Repository , Error > {
36
36
fn open ( repo : & Path ) -> Result < Repository , Error > {
37
+ eprintln ! ( "refreshing repository at {:?}" , repo) ;
38
+ // This uses the CLI because libgit2 is quite slow to fetch a large repository.
39
+ let status = std:: process:: Command :: new ( "git" )
40
+ . arg ( "fetch" )
41
+ . current_dir ( repo)
42
+ . status ( )
43
+ . context ( format ! (
44
+ "expected `git` command-line executable to be installed"
45
+ ) ) ?;
46
+ if !status. success ( ) {
47
+ bail ! ( "git fetch failed exit status {}" , status) ;
48
+ }
37
49
eprintln ! ( "opening existing repository at {:?}" , repo) ;
38
50
let repo = Repository :: open ( repo) ?;
39
- {
40
- eprintln ! ( "refreshing repository" ) ;
41
- let mut remote = repo. remote_anonymous ( RUST_SRC_URL ) ?;
42
- remote. fetch ( & [ "master" ] , None , None ) ?;
43
- }
44
51
Ok ( repo)
45
52
}
46
53
0 commit comments