@@ -13,7 +13,6 @@ use std::{
1313 io:: { Cursor , ErrorKind } ,
1414 path:: { Path , PathBuf } ,
1515 process:: { Command , Stdio } ,
16- str:: FromStr ,
1716 sync:: Arc ,
1817 time:: Duration ,
1918} ;
@@ -56,6 +55,7 @@ enum Commands {
5655 Sync {
5756 #[ arg( default_value = "http://bogen.moeh.re/" ) ]
5857 server : Url ,
58+ target_dir : Option < PathBuf > ,
5959 } ,
6060 /// Download the newest packages to the provided delta_cache path
6161 ///
@@ -80,8 +80,7 @@ enum Commands {
8080 Download {
8181 #[ arg( default_value = "http://bogen.moeh.re/" ) ]
8282 server : Url ,
83- #[ arg( default_value = "/var/cache/pacman/pkg/" ) ]
84- delta_cache : PathBuf ,
83+ delta_cache : Option < PathBuf > ,
8584 /// Disable fuzzy search if an exact package can not be found.
8685 /// This might find renames like -qt5 to -qt6
8786 #[ arg( long) ]
@@ -148,7 +147,7 @@ fn main() {
148147 . expect ( "initializing logger failed" ) ;
149148 log:: set_max_level ( level) ;
150149
151- let global = GlobalState :: new ( multi. clone ( ) , 5 , 1 ) ;
150+ let mut global = GlobalState :: new ( multi. clone ( ) , 5 , 1 ) ;
152151
153152 match args. command {
154153 #[ cfg( feature = "diff" ) ]
@@ -178,15 +177,21 @@ fn main() {
178177 only_delta,
179178 } => {
180179 renice ( ) ;
180+ if let Some ( p) = delta_cache {
181+ global. pacman_config . cache_dir = p;
182+ }
181183 let db = libalpm_rs:: db:: DBLock :: new ( ) . unwrap ( ) ;
182- std:: fs:: create_dir_all ( & delta_cache ) . unwrap ( ) ;
184+ std:: fs:: create_dir_all ( & global . pacman_config . cache_dir ) . unwrap ( ) ;
183185 mkruntime ( )
184- . block_on ( do_upgrade ( global, server, vec ! [ ] , delta_cache , !no_fuz, only_delta) )
186+ . block_on ( do_upgrade ( global, server, vec ! [ ] , !no_fuz, only_delta) )
185187 . unwrap ( ) ;
186188 std:: mem:: drop ( db)
187189 }
188- Commands :: Sync { server } => {
190+ Commands :: Sync { server, target_dir } => {
189191 renice ( ) ;
192+ if let Some ( t) = target_dir {
193+ global. pacman_config . db_path = t;
194+ }
190195 let db = libalpm_rs:: db:: DBLock :: new ( ) . unwrap ( ) ;
191196 mkruntime ( ) . block_on ( sync ( global, server) ) . unwrap ( ) ;
192197 std:: mem:: drop ( db)
@@ -254,16 +259,14 @@ fn full_upgrade(
254259 info ! ( "syncing databases" ) ;
255260 runtime. block_on ( sync ( global. clone ( ) , server. clone ( ) ) ) . unwrap ( ) ;
256261 }
257- let cachepath = PathBuf :: from_str ( "/var/cache/pacman/pkg" ) . unwrap ( ) ;
258- let ( deltasize, newsize, comptime) = match runtime
259- . block_on ( async move { do_upgrade ( global, server, blacklist, cachepath, !no_fuz, only_delta) . await } )
260- {
261- Ok ( ( d, n, c) ) => ( d, n, c) ,
262- Err ( e) => {
263- error ! ( "{e}" ) ;
264- panic ! ( "{e}" )
265- }
266- } ;
262+ let ( deltasize, newsize, comptime) =
263+ match runtime. block_on ( async move { do_upgrade ( global, server, blacklist, !no_fuz, only_delta) . await } ) {
264+ Ok ( ( d, n, c) ) => ( d, n, c) ,
265+ Err ( e) => {
266+ error ! ( "{e}" ) ;
267+ panic ! ( "{e}" )
268+ }
269+ } ;
267270 std:: mem:: drop ( db) ;
268271 info ! ( "running pacman -Su to install updates" ) ;
269272 let exit = Command :: new ( "pacman" )
@@ -302,7 +305,6 @@ async fn do_upgrade(
302305 global : GlobalState ,
303306 server : Url ,
304307 blacklist : Vec < Str > ,
305- delta_cache : PathBuf ,
306308 fuz : bool ,
307309 only_delta : bool ,
308310) -> anyhow:: Result < ( u64 , u64 , Option < Duration > ) > {
@@ -323,10 +325,9 @@ async fn do_upgrade(
323325 oldpkg. clone ( ) ,
324326 oldfile,
325327 dec_size,
326- delta_cache. clone ( ) ,
327328 server. clone ( ) ,
328329 ) ;
329- let get_sig_f = get_signature ( url , global. client . clone ( ) , delta_cache . clone ( ) , newpkg. clone ( ) ) ;
330+ let get_sig_f = get_signature ( global. clone ( ) , url , newpkg. clone ( ) ) ;
330331
331332 set. spawn_local_on (
332333 async move {
@@ -346,10 +347,10 @@ async fn do_upgrade(
346347 let mut dlset = JoinSet :: new ( ) ;
347348 if !only_delta {
348349 for url in downloads {
349- let boring_dl = util:: do_boring_download ( global. clone ( ) , url. clone ( ) , delta_cache . clone ( ) ) ;
350+ let boring_dl = util:: do_boring_download ( global. clone ( ) , url. clone ( ) ) ;
350351 let name = url. path_segments ( ) . and_then ( Iterator :: last) . context ( "malformed url" ) ?;
351352 let pkg = Package :: try_from ( name) . unwrap ( ) ;
352- let get_sig_f = get_signature ( url , global. client . clone ( ) , delta_cache . clone ( ) , pkg) ;
353+ let get_sig_f = get_signature ( global. clone ( ) , url , pkg) ;
353354 dlset. spawn_local_on (
354355 async move {
355356 let ( f, s) = tokio:: join!( boring_dl, get_sig_f) ;
@@ -422,6 +423,7 @@ pub(crate) struct GlobalState {
422423 maxpar_dl : Arc < Semaphore > ,
423424 maxpar_cpu : Arc < Semaphore > ,
424425 client : Client ,
426+ pacman_config : libalpm_rs:: config:: PacmanConfig ,
425427}
426428
427429impl GlobalState {
@@ -445,13 +447,16 @@ impl GlobalState {
445447 total_pg. tick ( ) ;
446448 total_pg. enable_steady_tick ( Duration :: from_millis ( 100 ) ) ;
447449
450+ let pacman_config = libalpm_rs:: config:: extract_relevant_config ( ) ;
451+
448452 Self {
449453 multi,
450454 total_pg,
451455 maxpar_req,
452456 maxpar_dl,
453457 maxpar_cpu,
454458 client,
459+ pacman_config,
455460 }
456461 }
457462
@@ -471,11 +476,10 @@ async fn get_delta(
471476 oldpkg : Package ,
472477 oldfile : Mmap ,
473478 mut dec_size : u64 ,
474- delta_cache : PathBuf ,
475479 server : Url ,
476480) -> Result < ( u64 , u64 , Option < Duration > ) , anyhow:: Error > {
477481 global. total_pg . inc_length ( dec_size) ;
478- let mut file_name = delta_cache . clone ( ) ;
482+ let mut file_name = global . pacman_config . cache_dir . clone ( ) ;
479483 file_name. push ( newpkg. to_string ( ) ) ;
480484 let delta = common:: Delta :: try_from ( ( oldpkg. clone ( ) , newpkg. clone ( ) ) ) ?;
481485 let deltafile_name = file_name. with_file_name ( format ! ( "{delta}.delta" ) ) ;
@@ -519,8 +523,8 @@ async fn get_delta(
519523 Ok ( ( deltasize, newsize, comptime) )
520524}
521525
522- async fn get_signature ( url : Url , client : Client , delta_cache : PathBuf , newpkg : Package ) -> Result < ( ) , anyhow:: Error > {
523- let mut sigfile = delta_cache . clone ( ) ;
526+ async fn get_signature ( global : GlobalState , url : Url , newpkg : Package ) -> Result < ( ) , anyhow:: Error > {
527+ let mut sigfile = global . pacman_config . cache_dir ;
524528 sigfile. push ( format ! ( "{newpkg}.sig" ) ) ;
525529 let mut sigfile = match tokio:: fs:: OpenOptions :: new ( )
526530 . write ( true )
@@ -535,7 +539,7 @@ async fn get_signature(url: Url, client: Client, delta_cache: PathBuf, newpkg: P
535539 } ;
536540 let sigurl = format ! ( "{url}.sig" ) ;
537541 debug ! ( "getting signature from {}" , url) ;
538- let mut res = client. get ( & sigurl) . send ( ) . await ?. error_for_status ( ) ?;
542+ let mut res = global . client . get ( & sigurl) . send ( ) . await ?. error_for_status ( ) ?;
539543 while let Some ( chunk) = res. chunk ( ) . await ? {
540544 sigfile. write_all ( & chunk) . await ?
541545 }
0 commit comments