@@ -13,7 +13,7 @@ from pwd import getpwnam
1313from decimal import Decimal
1414#from pyalpm import vercmp
1515from srcinfo .parse import parse_srcinfo
16- ARGV0 = 'sync- rebuild'
16+ ARGV0 = 'rebuild'
1717
1818def xdg_cache_home (user = None ):
1919 """Retrieve XDG_CACHE_HOME from the XDG Base Directory specification
@@ -119,7 +119,8 @@ def update_pkgrel(buildscript, pkgrel=None, increment=0.1):
119119
120120
121121# TODO: use vercmp to ensure rebuilds, abort reverse depends when depends fails (sync--ninja)
122- def rebuild_packages (repo_targets , db_name , start_dir , pkgver = False , fail_fast = False , user = None , * build_args ):
122+ def rebuild_packages (repo_targets , db_name , start_dir , pkgver = False ,
123+ fail_fast = False , user = None , * build_args ):
123124 """Rebuild a series of packages in successive order.
124125 """
125126 build_cmd = ['aur' , 'build' ] + list (* build_args )
@@ -146,7 +147,7 @@ def rebuild_packages(repo_targets, db_name, start_dir, pkgver=False, fail_fast=F
146147
147148 # Run pkgver() function for VCS packages
148149 if pkgver :
149- print (f'{ ARGV0 } : updating pkgver with aur-srcver' , file = sys .stderr )
150+ print (f'{ ARGV0 } : { pkgname } : updating pkgver with aur-srcver' , file = sys .stderr )
150151 for n , pkg_str in enumerate (run_readline (srcver_cmd , cwd = src_dir )):
151152 if n > 0 :
152153 raise RuntimeError ('ambiguous aur-srcver output' )
@@ -172,13 +173,13 @@ def rebuild_packages(repo_targets, db_name, start_dir, pkgver=False, fail_fast=F
172173 new_pkgrel = update_pkgrel (buildscript , pkgrel = float (pkgrel ), increment = 0.1 )
173174
174175 # Print bumped pkgrel to standard error
175- print (f'{ ARGV0 } : { pkgname } : { pkgver } -{ pkgrel } -> { pkgver } -{ new_pkgrel } ' ,
176+ print (f'{ ARGV0 } : { pkgbase } : { pkgver } -{ pkgrel } -> { pkgver } -{ new_pkgrel } ' ,
176177 file = sys .stderr )
177178 else :
178- print (f'{ ARGV0 } : source and local repository version differ' , file = sys .stderr )
179- print (f'{ ARGV0 } : using existing pkgver' , file = sys .stderr )
179+ print (f'{ ARGV0 } : { pkgbase } : source and local repository version differ' , file = sys .stderr )
180+ print (f'{ ARGV0 } : { pkgbase } : using existing pkgver' , file = sys .stderr )
180181
181- failed_rebuilds = {}
182+ failed = []
182183
183184 # Build package with modified pkgrel
184185 try :
@@ -204,21 +205,21 @@ def rebuild_packages(repo_targets, db_name, start_dir, pkgver=False, fail_fast=F
204205 except subprocess .CalledProcessError :
205206 # Build process failed, revert to unmodified PKGBUILD
206207 if buildscript_backup is not None :
207- print (f'{ ARGV0 } : build failed, reverting PKGBUILD' , file = sys .stderr )
208+ print (f'{ ARGV0 } : { pkgbase } : build failed, reverting PKGBUILD' , file = sys .stderr )
208209 os .replace (buildscript_backup , buildscript )
209210
210- # --fail-fast: if a package failed to build, also consider
211- # remaining targets as failed
211+ # --fail-fast: if a package failed to build, consider remaining targets as failed
212212 if fail_fast :
213213 print (f'{ ARGV0 } : { pkgbase } : build failed, exiting' , file = sys .stderr )
214+ # XXX: Preserve original order of inputs
214215 return rebuilds , list (set (repo_targets ) - set (rebuilds ))
215216
216217 # Mark rebuild as failure for later reporting to the user
217- failed_rebuilds [ pkgname ] = pkgbase
218+ failed . append ( pkgbase )
218219
219220 rebuilds [pkgname ] = pkgbase
220221
221- return rebuilds , failed_rebuilds
222+ return rebuilds , failed
222223
223224
224225def print_cached_packages (pkgnames ):
@@ -232,26 +233,26 @@ def print_cached_packages(pkgnames):
232233 p2 .communicate ()
233234
234235
235- def main (targets , db_name , start_dir , pkgver , fail_fast , run_sync , chroot , user ):
236+ def main (targets , db_name , start_dir , pkgver , fail_fast , run_fetch , chroot , user ):
236237 # Ensure all sources are available. Only packages are cloned that are
237238 # already available in the local repository.
238- sync_cmd = ['aur' , 'sync' , '--no-build' , '--no-ver-argv' ]
239- repo_cmd = ['aur' , 'repo' , '--jsonl' ]
239+ # XXX: Does not retrieve or handle new dependencies.
240+ fetch_cmd = ['aur' , 'fetch' , '--existing' ]
241+ repo_cmd = ['aur' , 'repo' , '--jsonl' ]
240242
241243 if user is not None :
242- sync_cmd = ['runuser' , '-u' , user , '--' ] + sync_cmd
243- repo_cmd = ['runuser' , '-u' , user , '--' ] + repo_cmd
244+ fetch_cmd = ['runuser' , '-u' , user , '--' ] + fetch_cmd
245+ repo_cmd = ['runuser' , '-u' , user , '--' ] + repo_cmd
244246
245247 if db_name is not None :
246- sync_cmd .extend (('--database' , db_name ))
247248 repo_cmd .extend (('--database' , db_name ))
248249
249250 if chroot :
250251 build_args = ['--chroot' ]
251252 else :
252253 build_args = ['--syncdeps' , '--rmdeps' , '--noconfirm' ]
253254
254- repo_targets = {}
255+ repo_targets_tmp = {}
255256
256257 # Read repository contents line by line to handle potentially large databases
257258 for pkg_str in run_readline (repo_cmd ):
@@ -260,35 +261,40 @@ def main(targets, db_name, start_dir, pkgver, fail_fast, run_sync, chroot, user)
260261
261262 # Restrict to packages specified on the command-line
262263 if pkgname in targets :
263- repo_targets [pkgname ] = {
264- 'PackageBase' : pkg ['PackageBase' ], 'Version' : pkg ['Version' ]
264+ repo_targets_tmp [pkgname ] = {
265+ 'PackageBase' : pkg ['PackageBase' ], 'Version' : pkg ['Version' ]
265266 }
266267
268+ # Restore order of command-line targets
269+ repo_targets = {}
270+ for target in targets :
271+ if target in repo_targets_tmp :
272+ repo_targets [target ] = repo_targets_tmp [target ]
273+
267274 # Clone targets that are part of the local repository
268- # TODO: handle "new" AUR targets as usual
269275 if len (repo_targets ) > 0 :
270- sync_cmd .extend (list (repo_targets .keys ()))
276+ fetch_cmd .extend (list (repo_targets .keys ()))
271277
272- if run_sync :
278+ if run_fetch :
273279 repo_targets_ordered = {} # `dict` preserves order since python >=3.6
274280
275281 # Temporary file for dependency order
276- with tempfile .NamedTemporaryFile () as sync_queue :
282+ with tempfile .NamedTemporaryFile () as fetch_results :
277283 # Read access to build user
278284 if user is not None :
279- shutil .chown (sync_queue .name , user = user )
285+ shutil .chown (fetch_results .name , user = user )
280286
281- # Clone AUR targets and retrieve dependency order. Dependencies
282- # not in the local repository already will be added as targets.
283- # XXX: requires at least one valid AUR target
284- subprocess .run ([* sync_cmd , '--save' , sync_queue .name ], check = True )
287+ # Clone AUR targets. Dependency order is taken from the command-line.
288+ subprocess .run ([* fetch_cmd , '--results' , fetch_results .name ],
289+ cwd = start_dir , check = True )
285290
286- with open (sync_queue .name , 'r' ) as f :
291+ # Retrieve names of cloned/fetched packages.
292+ with open (fetch_results .name , 'r' ) as f :
287293 for line in f .readlines ():
288- name = os .path .basename (line .rstrip ())
294+ name = os .path .basename (line .split ( ':' )[ - 1 ]. rstrip ())
289295 repo_targets_ordered [name ] = repo_targets [name ]
290296
291- # Local repository targets not retrieved by `aur-sync ` are missing from AUR
297+ # Local repository targets not retrieved by `aur-fetch ` are missing from AUR
292298 # XXX: append to queue if target directories are available
293299 not_aur = list (set (repo_targets .keys ()) - set (repo_targets_ordered .keys ()))
294300
@@ -308,9 +314,9 @@ def main(targets, db_name, start_dir, pkgver, fail_fast, run_sync, chroot, user)
308314
309315 if len (failed ) > 0 :
310316 print (f'{ ARGV0 } : the following targets failed to build:' , end = ' ' , file = sys .stderr )
311- print (' ' .join (failed . keys () ), file = sys .stderr )
317+ print (' ' .join (failed ), file = sys .stderr )
312318
313- rest = list (set (targets ) - set (rebuilds .keys ()) - set (failed . keys () ) - set (not_aur ))
319+ rest = list (set (targets ) - set (rebuilds .keys ()) - set (failed ) - set (not_aur ))
314320 else :
315321 rest = list (targets )
316322
@@ -333,7 +339,7 @@ if __name__ == '__main__':
333339 parser .add_argument ('-U' , '--user' )
334340 parser .add_argument ('--pkgver' , action = 'store_true' )
335341 parser .add_argument ('--fail-fast' , action = 'store_true' )
336- parser .add_argument ('--no-sync ' , action = 'store_false' )
342+ parser .add_argument ('--no-fetch ' , action = 'store_false' )
337343 parser .add_argument ('targets' , nargs = '+' )
338344 args = parser .parse_args ()
339345
@@ -352,9 +358,9 @@ if __name__ == '__main__':
352358 # Get the path to user-specific cache files
353359 # Note: this only retrieves `AURDEST` from the current user environment.
354360 if 'AURDEST' in os .environ :
355- aurdest = os .getenv ('AURDEST' )
361+ start_dir = os .getenv ('AURDEST' )
356362 else :
357- aurdest = os .path .join (xdg_cache_home (args .user ), 'aurutils/sync' )
363+ start_dir = os .path .join (xdg_cache_home (args .user ), 'aurutils/sync' )
358364
359- main ({i :1 for i in args .targets }, args .database , aurdest ,
360- args .pkgver , args .fail_fast , args .no_sync , args .chroot , args .user )
365+ main ({i :1 for i in args .targets }, args .database , start_dir ,
366+ args .pkgver , args .fail_fast , args .no_fetch , args .chroot , args .user )
0 commit comments