@@ -30,6 +30,7 @@ var ErrEngineAssociationNeedsPrefix = errors.New("engine association needs 'ue4v
3030type DownloadOptions struct {
3131 EngineBundle string
3232 FetchSymbols bool
33+ AssumeValid bool
3334}
3435
3536// GetEngineAssociation returns a .uproject engine association.
@@ -110,7 +111,7 @@ func FetchEngine(rootDir string, baseURL, version string, options DownloadOption
110111 return
111112 }
112113
113- assetInfo [i ].err = download (baseURL , dest , assetInfo [i ].name , name )
114+ assetInfo [i ].err = download (baseURL , rootDir , name , assetInfo [i ].name , name , options . AssumeValid )
114115 }(idx , version )
115116 }
116117 wg .Wait ()
@@ -125,33 +126,38 @@ func FetchEngine(rootDir string, baseURL, version string, options DownloadOption
125126 return dest , err
126127}
127128
128- func download (baseURL , dest , asset , version string ) error {
129+ func download (baseURL , rootDir , name , asset , version string , assumeValid bool ) error {
129130 urlStr := fmt .Sprintf ("%s/%s-%s.7z" , baseURL , asset , version )
130131 uri , err := url .Parse (urlStr )
131132 if err != nil {
132133 return err
133134 }
134135
135136 req , _ := http .NewRequest ("GET" , uri .String (), nil )
137+ dest := filepath .Join (rootDir , name )
136138
137139 // if archive exists, see if we can do a range request
138- archivePath := dest + "-" + asset + ".7z"
140+ archivePath := filepath . Join ( rootDir , asset ) + "-" + name + ".7z"
139141 if fi , err := os .Stat (archivePath ); err == nil {
140- resp , err := http .Head (uri .String ())
141- if err != nil {
142- return err
143- }
144- if resp .StatusCode >= 400 {
145- return errors .New (fmt .Sprintf ("%s: %s" , resp .Status , urlStr ))
146- }
147- if resp .Header .Get ("Content-Length" ) != "" {
148- size , err := strconv .Atoi (resp .Header .Get ("Content-Length" ))
149- if err == nil && int64 (size ) == fi .Size () {
150- return extract (asset , archivePath , dest )
142+ if assumeValid {
143+ return extract (asset , archivePath , dest )
144+ } else {
145+ resp , err := http .Head (uri .String ())
146+ if err != nil {
147+ return err
148+ }
149+ if resp .StatusCode >= 400 {
150+ return errors .New (fmt .Sprintf ("%s: %s" , resp .Status , urlStr ))
151+ }
152+ if resp .Header .Get ("Content-Length" ) != "" {
153+ size , err := strconv .Atoi (resp .Header .Get ("Content-Length" ))
154+ if err == nil && int64 (size ) == fi .Size () {
155+ return extract (asset , archivePath , dest )
156+ }
157+ }
158+ if resp .Header .Get ("Accept-Ranges" ) == "bytes" {
159+ req .Header .Set ("Range" , fmt .Sprintf ("bytes=%d-" , fi .Size ()))
151160 }
152- }
153- if resp .Header .Get ("Accept-Ranges" ) == "bytes" {
154- req .Header .Set ("Range" , fmt .Sprintf ("bytes=%d-" , fi .Size ()))
155161 }
156162 }
157163
0 commit comments