|  | @@ -18,18 +18,21 @@ def main():
 | 
	
		
			
				|  |  |      last_parent = None
 | 
	
		
			
				|  |  |      jobs = []
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      if args.abe_command:
 | 
	
		
			
				|  |  |          executeAbeCommand( args.output_dir, args.abe_command )
 | 
	
		
			
				|  |  |      else:
 | 
	
		
			
				|  |  | -        for sub in abe_submodules(
 | 
	
		
			
				|  |  | +        subs = abe_submodules(
 | 
	
		
			
				|  |  |              args.output_dir, args.source_url, args.tag,
 | 
	
		
			
				|  |  |                  recurse_bsps=args.recurse_bsps,
 | 
	
		
			
				|  |  | -                recurse_bootloaders=args.recurse_bootloaders ):
 | 
	
		
			
				|  |  | -            count_submodules += 1
 | 
	
		
			
				|  |  | -            if DEBUG > 0:
 | 
	
		
			
				|  |  | -                print("Count:",count_submodules)
 | 
	
		
			
				|  |  | +                recurse_bootloaders=args.recurse_bootloaders )
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if args.execute_command:
 | 
	
		
			
				|  |  | +            for sub in subs:
 | 
	
		
			
				|  |  | +                count_submodules += 1
 | 
	
		
			
				|  |  | +                if DEBUG > 0:
 | 
	
		
			
				|  |  | +                    print("Count:",count_submodules)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if args.execute_command:
 | 
	
		
			
				|  |  |                  from subprocess import run, CalledProcessError
 | 
	
		
			
				|  |  |                  import sys
 | 
	
		
			
				|  |  |                  try:
 | 
	
	
		
			
				|  | @@ -38,26 +41,42 @@ def main():
 | 
	
		
			
				|  |  |                      print(f"Command: \"{args.execute_command}\" in \"{sub.fullpath}\" returned exitcode \"{err.returncode}\"")
 | 
	
		
			
				|  |  |                      sys.exit(err.returncode)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            clone_subs_threaded(subs, jobs=args.jobs, kwargs={'cache_dir':args.cache_dir, 'fetch_origin':(not args.no_fetch_origin)})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def clone_subs_threaded(subs, jobs=0, kwargs={}):
 | 
	
		
			
				|  |  | +    import multiprocessing
 | 
	
		
			
				|  |  | +    import time
 | 
	
		
			
				|  |  | +    if jobs < 1:
 | 
	
		
			
				|  |  | +        jobs = multiprocessing.cpu_count()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    with multiprocessing.Pool(processes=jobs) as pool:
 | 
	
		
			
				|  |  | +        jobs = []
 | 
	
		
			
				|  |  | +        for sub in subs:
 | 
	
		
			
				|  |  | +            job = pool.apply_async(sub.clone_repo, (), kwargs)
 | 
	
		
			
				|  |  | +            jobs.append(job)
 | 
	
		
			
				|  |  | +            if sub.last:
 | 
	
		
			
				|  |  | +                while not jobs == []:
 | 
	
		
			
				|  |  | +                    j = jobs.pop(0)
 | 
	
		
			
				|  |  | +                    j.get()
 | 
	
		
			
				|  |  | +        while not jobs == []:
 | 
	
		
			
				|  |  | +            j = jobs.pop(0)
 | 
	
		
			
				|  |  | +            j.get()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +'''
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for j in jobs:
 | 
	
		
			
				|  |  | +                if not j.is_alive():
 | 
	
		
			
				|  |  | +                    j.join()
 | 
	
		
			
				|  |  | +                    to_remove = j
 | 
	
		
			
				|  |  | +            if to_remove:
 | 
	
		
			
				|  |  | +                jobs.remove(to_remove)
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  | -                from threading import Thread
 | 
	
		
			
				|  |  | -                import time
 | 
	
		
			
				|  |  | -                job = Thread(target=sub.clone_repo, kwargs={'cache_dir':args.cache_dir, 'fetch_origin':(not args.no_fetch_origin)})
 | 
	
		
			
				|  |  | -                job.start()
 | 
	
		
			
				|  |  | -                jobs.append(job)
 | 
	
		
			
				|  |  | -                while len(jobs) >= args.jobs:
 | 
	
		
			
				|  |  | -                    to_remove = None
 | 
	
		
			
				|  |  | -                    for j in jobs:
 | 
	
		
			
				|  |  | -                        if not j.is_alive():
 | 
	
		
			
				|  |  | -                            j.join()
 | 
	
		
			
				|  |  | -                            to_remove = j
 | 
	
		
			
				|  |  | -                    if to_remove:
 | 
	
		
			
				|  |  | -                        jobs.remove(to_remove)
 | 
	
		
			
				|  |  | -                    else:
 | 
	
		
			
				|  |  | -                        time.sleep(1)
 | 
	
		
			
				|  |  | -                if sub.last:
 | 
	
		
			
				|  |  | -                    while len(jobs):
 | 
	
		
			
				|  |  | -                        jobs.pop().join()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                time.sleep(1)
 | 
	
		
			
				|  |  | +        if sub.last:
 | 
	
		
			
				|  |  | +            while len(jobs):
 | 
	
		
			
				|  |  | +                jobs.pop().join()
 | 
	
		
			
				|  |  | +'''
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def parser():
 | 
	
		
			
				|  |  |      import argparse
 |