예제 #1
0
def store_pdbs_in_directory(pdb_path, store_path, product, version):
    """Recursively adds all of the pdb files in a provided directory to the symbols store."""
    sym_store = symstore.Store(store_path)
    transaction = sym_store.new_transaction(product, version)
    num_files_stored = 0
    for root, subdirs, files in os.walk(pdb_path):
        for file in files:
            file_path = os.path.join(root, file)
            
            # Rename the python.pdb to python##.pdb.
            if "core_pdb" in root and file == "python.pdb":
                major, minor, *_ = version.split(".")
                new_file_path = file_path.replace("python.pdb", "python" + major + minor + ".pdb")
                os.rename(file_path, new_file_path)
                file_path = new_file_path
            
            # Add PDB files
            is_compression_supported = symstore.cab.compress is not None
            if file_path.endswith(".pdb"):
                entry = transaction.new_entry(file_path, compress=is_compression_supported)
                transaction.add_entry(entry)
                num_files_stored += 1
    
    if num_files_stored > 0:
        sym_store.commit(transaction)
예제 #2
0
def main():
    args = parse_args()
    sym_store = symstore.Store(args.store_path)

    if args.delete is not None:
        delete_action(sym_store, args.delete)
        return

    # otherwise this is an 'add' action
    add_action(sym_store, args.files, args.product_name, args.product_version,
               args.compress)
예제 #3
0
    def setUp(self):
        """
        set-up a new symstore with one compressed transaction
        """
        empty_dir = path.join(tempfile.mkdtemp(), "empty")
        self.symstore = symstore.Store(empty_dir)

        transaction = self.symstore.new_transaction("prod", "0.0.0")
        transaction.add_file(path.join(util.SYMFILES_DIR, "dummylib.pdb"),
                             compress=True)

        self.symstore.commit(transaction)
예제 #4
0
    def assertSymstoreDir(self, expected_dir_zip):
        expected_store = ZipSymstore(path.join(SYMFILES_DIR, expected_dir_zip))
        generated_store = symstore.Store(self.symstore_path)

        self._assert_transactions(expected_store.transactions,
                                  generated_store.transactions,
                                  generated_store.modify_timestamp)

        self._assert_history(expected_store.history, generated_store.history,
                             generated_store.modify_timestamp)

        self._assert_modify_timestamp(generated_store.modify_timestamp)

        self._assert_next_transaction_id(expected_store, generated_store)
예제 #5
0
def main():

    args = parse_args()
    sym_store = symstore.Store(args.store_path)
    pp_args = "\n ".join([": ".join([k, str(getattr(args, k))
                                     if not isinstance(getattr(args, k), (list))
                                     else ", ".join(getattr(args, k))])
                          for k in vars(args)])

    log_level = logging.INFO if args.silent else logging.DEBUG
    log_file = args.save_log if args.save_log else None
    message = args.message if args.message else ""

    update_logging(log, log_level=log_level, log_file=log_file)
    log.debug("Started symstore ops via CLI.")
    log.debug("Parameters: %s " % pp_args)

    try:
        # error-out if no compression
        check_compression_support(args.compress)

        # create new add transaction, add all specified files
        transaction = sym_store.new_transaction(args.product_name,
                                                args.product_version,
                                                message)

        for target_item in args.target_files:
            if os.path.isdir(target_item):
                for item_target_file in parse_directory(target_item,
                                                        ".*pdb$|.*exe$"):
                    transaction.add_file(item_target_file, args.compress)
            elif os.path.isfile(target_item):
                transaction.add_file(target_item, args.compress)
            else:
                transaction.add_file(target_item, args.compress)

        # commit the transaction to the store
        sym_store.commit(transaction)

        if args.index:
            sym_store.index_data(transaction)

    except symstore.UnknownFileExtension as e:
        unknown_ext_err(file, e.file_extension)
    except symstore.FileFormatError as e:
        err_exit("%s: invalid %s file: %s" % (file, e.format_name, e))
    except CompressionNotSupported:
        err_exit("gcab module not available, compression not supported")
예제 #6
0
def main():

    args = parse_args()

    sym_store = symstore.Store(args.store_path)

    try:
        # error-out if no compression
        check_compression_support(args.compress)

        # create new add transaction, add all specified files
        transaction = sym_store.new_transaction(args.product_name,
                                                args.product_version)
        for file in args.files:
            transaction.add_file(file, args.compress)

        # commit the transaction to the store
        sym_store.commit(transaction)
    except symstore.UnknownFileExtension as e:
        unknown_ext_err(file, e.file_extension)
    except symstore.FileFormatError as e:
        err_exit("%s: invalid %s file: %s" % (file, e.format_name, e))
    except CompressionNotSupported:
        err_exit("gcab module not available, compression not supported")
예제 #7
0
 def setUp(self):
     empty_dir = path.join(tempfile.mkdtemp(), "empty")
     self.symstore = symstore.Store(empty_dir)