- assert(import);
- assert(dkr_url_is_valid(index_url));
-
- i = new0(DkrImport, 1);
- if (!i)
- return -ENOMEM;
-
- i->on_finished = on_finished;
- i->userdata = userdata;
-
- i->index_url = strdup(index_url);
- if (!i->index_url)
- return -ENOMEM;
-
- e = endswith(i->index_url, "/");
- if (e)
- *e = 0;
-
- if (event)
- i->event = sd_event_ref(event);
- else {
- r = sd_event_default(&i->event);
- if (r < 0)
- return r;
- }
-
- r = curl_glue_new(&i->glue, i->event);
- if (r < 0)
- return r;
-
- i->glue->on_finished = dkr_import_curl_on_finished;
- i->glue->userdata = i;
-
- *import = i;
- i = NULL;
-
- return 0;
-}
-
-DkrImport* dkr_import_unref(DkrImport *import) {
- DkrImportName *n;
- DkrImportJob *j;
-
- if (!import)
- return NULL;
-
- while ((n = hashmap_steal_first(import->names)))
- dkr_import_name_unref(n);
- hashmap_free(import->names);
-
- while ((j = hashmap_steal_first(import->jobs)))
- dkr_import_job_unref(j);
- hashmap_free(import->jobs);
-
- curl_glue_unref(import->glue);
- sd_event_unref(import->event);
-
- free(import->index_url);
-
- free(import);
-
- return NULL;
-}
-
-int dkr_import_cancel(DkrImport *import, const char *name) {
- DkrImportName *n;
-
- assert(import);
- assert(name);
-
- n = hashmap_remove(import->names, name);
- if (!n)
- return 0;
-
- dkr_import_name_unref(n);
- return 1;
-}
-
-int dkr_import_pull(DkrImport *import, const char *name, const char *tag, const char *local, bool force_local) {
- _cleanup_(dkr_import_name_unrefp) DkrImportName *n = NULL;
- int r;
-
- assert(import);
- assert(dkr_name_is_valid(name));
- assert(dkr_tag_is_valid(tag));
- assert(!local || machine_name_is_valid(local));
-
- if (hashmap_get(import->names, name))
- return -EEXIST;
-
- r = hashmap_ensure_allocated(&import->names, &string_hash_ops);