diff --git a/archivebox/config.py b/archivebox/config.py index 9f373004..785e6a60 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -391,12 +391,20 @@ def get_version(config): raise Exception('Failed to detect installed archivebox version!') -def get_commit_hash(config): +def get_commit_hash(config) -> Optional[str]: try: return list((config['PACKAGE_DIR'] / '../.git/refs/heads/').glob('*'))[0].read_text().strip() except Exception: return None +def get_build_time(config) -> str: + if config['IN_DOCKER']: + docker_build_end_time = Path('/VERSION.txt').read_text().rsplit('BUILD_END_TIME=')[-1].split('\n', 1)[0] + return docker_build_end_time + + src_last_modified_unix_timestamp = (config['PACKAGE_DIR'] / 'config.py').stat().st_mtime + return datetime.fromtimestamp(src_last_modified_unix_timestamp).strftime('%Y-%m-%d %H:%M:%S %s') + ############################## Derived Config ################################## @@ -425,6 +433,7 @@ DYNAMIC_CONFIG_SCHEMA: ConfigDefaultDict = { 'ARCHIVEBOX_BINARY': {'default': lambda c: sys.argv[0] or bin_path('archivebox')}, 'VERSION': {'default': lambda c: get_version(c)}, 'COMMIT_HASH': {'default': lambda c: get_commit_hash(c)}, + 'BUILD_TIME': {'default': lambda c: get_build_time(c)}, 'PYTHON_BINARY': {'default': lambda c: sys.executable}, 'PYTHON_ENCODING': {'default': lambda c: sys.stdout.encoding.upper()}, diff --git a/archivebox/main.py b/archivebox/main.py index 8968dea6..05b22b46 100755 --- a/archivebox/main.py +++ b/archivebox/main.py @@ -93,11 +93,13 @@ from .config import ( SQL_INDEX_FILENAME, ALLOWED_IN_OUTPUT_DIR, SEARCH_BACKEND_ENGINE, + LDAP, check_dependencies, check_data_folder, write_config_file, VERSION, COMMIT_HASH, + BUILD_TIME, CODE_LOCATIONS, EXTERNAL_LOCATIONS, DATA_LOCATIONS, @@ -218,31 +220,39 @@ def version(quiet: bool=False, if not quiet: # 0.7.1 - # ArchiveBox v0.7.1 Cpython Linux Linux-4.19.121-linuxkit-x86_64-with-glibc2.28 x86_64 (in Docker) (in TTY) - # DEBUG=False IN_DOCKER=True IN_QEMU=False IS_TTY=True TZ=UTC FS_ATOMIC=True FS_REMOTE=False FS_PERMS=644 FS_USER=501:20 SEARCH_BACKEND=ripgrep + # ArchiveBox v0.7.1+editable COMMIT_HASH=951bba5 BUILD_TIME=2023-12-17 16:46:05 1702860365 + # IN_DOCKER=False IN_QEMU=False ARCH=arm64 OS=Darwin PLATFORM=macOS-14.2-arm64-arm-64bit PYTHON=Cpython + # FS_ATOMIC=True FS_REMOTE=False FS_USER=501:20 FS_PERMS=644 + # DEBUG=False IS_TTY=True TZ=UTC SEARCH_BACKEND=ripgrep LDAP=False p = platform.uname() print( 'ArchiveBox v{}'.format(VERSION), - *((COMMIT_HASH[:7],) if COMMIT_HASH else ()), - sys.implementation.name.title(), - p.system, - platform.platform(), - p.machine, + *((f'COMMIT_HASH={COMMIT_HASH[:7]}',) if COMMIT_HASH else ()), + f'BUILD_TIME={BUILD_TIME}', + ) + print( + f'IN_DOCKER={IN_DOCKER}', + f'IN_QEMU={IN_QEMU}', + f'ARCH={p.machine}', + f'OS={p.system}', + f'PLATFORM={platform.platform()}', + f'PYTHON={sys.implementation.name.title()}', ) OUTPUT_IS_REMOTE_FS = DATA_LOCATIONS['OUTPUT_DIR']['is_mount'] or DATA_LOCATIONS['ARCHIVE_DIR']['is_mount'] print( - f'DEBUG={DEBUG}', - f'IN_DOCKER={IN_DOCKER}', - f'IN_QEMU={IN_QEMU}', - f'IS_TTY={IS_TTY}', - f'TZ={TIMEZONE}', - #f'DB=django.db.backends.sqlite3 (({CONFIG["SQLITE_JOURNAL_MODE"]})', # add this if we have more useful info to show eventually f'FS_ATOMIC={ENFORCE_ATOMIC_WRITES}', f'FS_REMOTE={OUTPUT_IS_REMOTE_FS}', f'FS_USER={PUID}:{PGID}', f'FS_PERMS={OUTPUT_PERMISSIONS}', + ) + print( + f'DEBUG={DEBUG}', + f'IS_TTY={IS_TTY}', + f'TZ={TIMEZONE}', f'SEARCH_BACKEND={SEARCH_BACKEND_ENGINE}', + f'LDAP={LDAP}', + #f'DB=django.db.backends.sqlite3 (({CONFIG["SQLITE_JOURNAL_MODE"]})', # add this if we have more useful info to show eventually ) print() @@ -271,7 +281,7 @@ def version(quiet: bool=False, print(printable_folder_status(name, path)) else: print() - print('{white}[i] Data locations:{reset}'.format(**ANSI)) + print('{white}[i] Data locations:{reset} (not in a data directory)'.format(**ANSI)) print() check_dependencies()