tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rebuild_check.py (1631B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import errno
      6 import os
      7 
      8 
      9 def mtime(path):
     10    try:
     11        return os.stat(path).st_mtime
     12    except OSError as e:
     13        if e.errno == errno.ENOENT:
     14            return -1
     15        raise
     16 
     17 
     18 def rebuild_check(args):
     19    target = args[0]
     20    deps = args[1:]
     21    t = mtime(target)
     22    if t < 0:
     23        print(target)
     24        return
     25 
     26    newer = []
     27    removed = []
     28    for dep in deps:
     29        deptime = mtime(dep)
     30        if deptime < 0:
     31            removed.append(dep)
     32        elif deptime > t:
     33            newer.append(dep)
     34 
     35    def format_filelist(filelist):
     36        if not filelist:
     37            return None
     38 
     39        limit = 5
     40        length = len(filelist)
     41        if length < limit:
     42            return ", ".join(filelist)
     43 
     44        truncated = filelist[:limit]
     45        remaining = length - limit
     46 
     47        return "%s (and %d other files)" % (", ".join(truncated), remaining)
     48 
     49    newer = format_filelist(newer)
     50    removed = format_filelist(removed)
     51 
     52    if newer and removed:
     53        print(
     54            "Rebuilding %s because %s changed and %s was removed"
     55            % (target, newer, removed)
     56        )
     57    elif newer:
     58        print("Rebuilding %s because %s changed" % (target, newer))
     59    elif removed:
     60        print("Rebuilding %s because %s was removed" % (target, removed))
     61    else:
     62        print("Rebuilding %s for an unknown reason" % target)
     63 
     64 
     65 if __name__ == "__main__":
     66    import sys
     67 
     68    rebuild_check(sys.argv[1:])