[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Git][ftp-team/dak][master] 2 commits: clean: call `stat` only once for to-be-removed files



Title: GitLab

Ansgar pushed to branch master at Debian FTP Team / dak

Commits:

1 changed file:

Changes:

  • dak/clean_suites.py
    ... ... @@ -286,37 +286,36 @@ def clean(now_date, archives, max_delete, session):
    286 286
     
    
    287 287
         for af in old_files:
    
    288 288
             filename = af.path
    
    289
    -        if not os.path.exists(filename):
    
    290
    -            Logger.log(["database referred to non-existing file", af.path])
    
    289
    +        try:
    
    290
    +            st = os.lstat(filename)
    
    291
    +        except FileNotFoundError:
    
    292
    +            Logger.log(["database referred to non-existing file", filename])
    
    291 293
                 session.delete(af)
    
    292 294
                 continue
    
    293 295
             Logger.log(["delete archive file", filename])
    
    294
    -        if os.path.isfile(filename):
    
    295
    -            if os.path.islink(filename):
    
    296
    -                count += 1
    
    297
    -                Logger.log(["delete symlink", filename])
    
    298
    -                if not Options["No-Action"]:
    
    299
    -                    os.unlink(filename)
    
    300
    -            else:
    
    301
    -                size += os.stat(filename)[stat.ST_SIZE]
    
    302
    -                count += 1
    
    303
    -
    
    304
    -                dest_filename = dest + '/' + os.path.basename(filename)
    
    305
    -                # If the destination file exists; try to find another filename to use
    
    306
    -                if os.path.lexists(dest_filename):
    
    307
    -                    dest_filename = utils.find_next_free(dest_filename)
    
    296
    +        if stat.S_ISLNK(st.st_mode):
    
    297
    +            count += 1
    
    298
    +            Logger.log(["delete symlink", filename])
    
    299
    +            if not Options["No-Action"]:
    
    300
    +                os.unlink(filename)
    
    301
    +                session.delete(af)
    
    302
    +        elif stat.S_ISREG(st.st_mode):
    
    303
    +            size += st.st_size
    
    304
    +            count += 1
    
    308 305
     
    
    309
    -                if not Options["No-Action"]:
    
    310
    -                    if af.archive.use_morgue:
    
    311
    -                        Logger.log(["move to morgue", filename, dest_filename])
    
    312
    -                        utils.move(filename, dest_filename)
    
    313
    -                    else:
    
    314
    -                        Logger.log(["removed file", filename])
    
    315
    -                        os.unlink(filename)
    
    306
    +            dest_filename = dest + '/' + os.path.basename(filename)
    
    307
    +            # If the destination file exists; try to find another filename to use
    
    308
    +            if os.path.lexists(dest_filename):
    
    309
    +                dest_filename = utils.find_next_free(dest_filename)
    
    316 310
     
    
    317 311
                 if not Options["No-Action"]:
    
    312
    +                if af.archive.use_morgue:
    
    313
    +                    Logger.log(["move to morgue", filename, dest_filename])
    
    314
    +                    utils.move(filename, dest_filename)
    
    315
    +                else:
    
    316
    +                    Logger.log(["removed file", filename])
    
    317
    +                    os.unlink(filename)
    
    318 318
                     session.delete(af)
    
    319
    -                session.commit()
    
    320 319
     
    
    321 320
             else:
    
    322 321
                 utils.fubar("%s is neither symlink nor file?!" % (filename))
    


  • Reply to: