static int add_default_backends(git_odb *db, const char *objects_dir, int as_alternates) { git_odb_backend *loose, *packed; int error; /* add the loose object backend */ error = git_odb_backend_loose(&loose, objects_dir); if (error < GIT_SUCCESS) return error; error = add_backend_internal(db, loose, GIT_LOOSE_PRIORITY, as_alternates); if (error < GIT_SUCCESS) return error; /* add the packed file backend */ error = git_odb_backend_pack(&packed, objects_dir); if (error < GIT_SUCCESS) return error; error = add_backend_internal(db, packed, GIT_PACKED_PRIORITY, as_alternates); if (error < GIT_SUCCESS) return error; return GIT_SUCCESS; }
static int add_default_backends( git_odb *db, const char *objects_dir, bool as_alternates, int alternate_depth) { size_t i; struct stat st; ino_t inode; git_odb_backend *loose, *packed; /* TODO: inodes are not really relevant on Win32, so we need to find * a cross-platform workaround for this */ #ifdef GIT_WIN32 GIT_UNUSED(i); GIT_UNUSED(st); inode = 0; #else if (p_stat(objects_dir, &st) < 0) { if (as_alternates) return 0; giterr_set(GITERR_ODB, "Failed to load object database in '%s'", objects_dir); return -1; } inode = st.st_ino; for (i = 0; i < db->backends.length; ++i) { backend_internal *backend = git_vector_get(&db->backends, i); if (backend->disk_inode == inode) return 0; } #endif /* add the loose object backend */ if (git_odb_backend_loose(&loose, objects_dir, -1, 0, 0, 0) < 0 || add_backend_internal(db, loose, GIT_LOOSE_PRIORITY, as_alternates, inode) < 0) return -1; /* add the packed file backend */ if (git_odb_backend_pack(&packed, objects_dir) < 0 || add_backend_internal(db, packed, GIT_PACKED_PRIORITY, as_alternates, inode) < 0) return -1; return load_alternates(db, objects_dir, alternate_depth); }
int git_odb_add_alternate(git_odb *odb, git_odb_backend *backend, int priority) { return add_backend_internal(odb, backend, priority, true, 0); }
int git_odb_add_backend(git_odb *odb, git_odb_backend *backend, int priority) { return add_backend_internal(odb, backend, priority, false, 0); }