[pacman-dev] [PATCH 5/5] Remove support for deltas from libalpm
Allan McRae
allan at archlinux.org
Sat Mar 2 10:19:16 UTC 2019
Signed-off-by: Allan McRae <allan at archlinux.org>
---
lib/libalpm/Makefile.am | 1 -
lib/libalpm/alpm.h | 53 ------
lib/libalpm/be_sync.c | 21 +--
lib/libalpm/delta.c | 361 -------------------------------------
lib/libalpm/delta.h | 33 ----
lib/libalpm/error.c | 5 -
lib/libalpm/handle.c | 20 --
lib/libalpm/handle.h | 5 -
lib/libalpm/meson.build | 1 -
lib/libalpm/package.c | 14 --
lib/libalpm/package.h | 2 -
lib/libalpm/po/POTFILES.in | 1 -
lib/libalpm/sync.c | 207 +--------------------
src/pacman/callback.c | 8 -
14 files changed, 10 insertions(+), 722 deletions(-)
delete mode 100644 lib/libalpm/delta.c
delete mode 100644 lib/libalpm/delta.h
diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am
index 8201dcbd..1e01feeb 100644
--- a/lib/libalpm/Makefile.am
+++ b/lib/libalpm/Makefile.am
@@ -34,7 +34,6 @@ libalpm_la_SOURCES = \
be_sync.c \
conflict.h conflict.c \
db.h db.c \
- delta.h delta.c \
deps.h deps.c \
diskspace.h diskspace.c \
dload.h dload.c \
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 337b30d2..ffb2ad96 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -104,9 +104,6 @@ typedef enum _alpm_errno_t {
/* Signatures */
ALPM_ERR_SIG_MISSING,
ALPM_ERR_SIG_INVALID,
- /* Deltas */
- ALPM_ERR_DLT_INVALID,
- ALPM_ERR_DLT_PATCHFAILED,
/* Dependencies */
ALPM_ERR_UNSATISFIED_DEPS,
ALPM_ERR_CONFLICTING_DEPS,
@@ -273,22 +270,6 @@ typedef struct _alpm_group_t {
alpm_list_t *packages;
} alpm_group_t;
-/** Package upgrade delta */
-typedef struct _alpm_delta_t {
- /** filename of the delta patch */
- char *delta;
- /** md5sum of the delta file */
- char *delta_md5;
- /** filename of the 'before' file */
- char *from;
- /** filename of the 'after' file */
- char *to;
- /** filesize of the delta file */
- off_t delta_size;
- /** download filesize of the delta file */
- off_t download_size;
-} alpm_delta_t;
-
/** File in a package */
typedef struct _alpm_file_t {
char *name;
@@ -405,21 +386,6 @@ typedef enum _alpm_event_type_t {
ALPM_EVENT_LOAD_START,
/** Target package is finished loading. */
ALPM_EVENT_LOAD_DONE,
- /** Target delta's integrity will be checked. */
- ALPM_EVENT_DELTA_INTEGRITY_START,
- /** Target delta's integrity was checked. */
- ALPM_EVENT_DELTA_INTEGRITY_DONE,
- /** Deltas will be applied to packages. */
- ALPM_EVENT_DELTA_PATCHES_START,
- /** Deltas were applied to packages. */
- ALPM_EVENT_DELTA_PATCHES_DONE,
- /** Delta patch will be applied to target package; See
- * alpm_event_delta_patch_t for arguments.. */
- ALPM_EVENT_DELTA_PATCH_START,
- /** Delta patch was applied to target package. */
- ALPM_EVENT_DELTA_PATCH_DONE,
- /** Delta patch failed to apply to target package. */
- ALPM_EVENT_DELTA_PATCH_FAILED,
/** Scriptlet has printed information; See alpm_event_scriptlet_info_t for
* arguments. */
ALPM_EVENT_SCRIPTLET_INFO,
@@ -509,13 +475,6 @@ typedef struct _alpm_event_optdep_removal_t {
alpm_depend_t *optdep;
} alpm_event_optdep_removal_t;
-typedef struct _alpm_event_delta_patch_t {
- /** Type of event. */
- alpm_event_type_t type;
- /** Delta info */
- alpm_delta_t *delta;
-} alpm_event_delta_patch_t;
-
typedef struct _alpm_event_scriptlet_info_t {
/** Type of event. */
alpm_event_type_t type;
@@ -589,7 +548,6 @@ typedef union _alpm_event_t {
alpm_event_any_t any;
alpm_event_package_operation_t package_operation;
alpm_event_optdep_removal_t optdep_removal;
- alpm_event_delta_patch_t delta_patch;
alpm_event_scriptlet_info_t scriptlet_info;
alpm_event_database_missing_t database_missing;
alpm_event_pkgdownload_t pkgdownload;
@@ -915,9 +873,6 @@ const char *alpm_option_get_arch(alpm_handle_t *handle);
/** Sets the targeted architecture. */
int alpm_option_set_arch(alpm_handle_t *handle, const char *arch);
-double alpm_option_get_deltaratio(alpm_handle_t *handle);
-int alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio);
-
int alpm_option_get_checkspace(alpm_handle_t *handle);
int alpm_option_set_checkspace(alpm_handle_t *handle, int checkspace);
@@ -1294,12 +1249,6 @@ alpm_list_t *alpm_pkg_get_conflicts(alpm_pkg_t *pkg);
*/
alpm_list_t *alpm_pkg_get_provides(alpm_pkg_t *pkg);
-/** Returns the list of available deltas for pkg.
- * @param pkg a pointer to package
- * @return a reference to an internal list of strings.
- */
-alpm_list_t *alpm_pkg_get_deltas(alpm_pkg_t *pkg);
-
/** Returns the list of packages to be replaced by pkg.
* @param pkg a pointer to package
* @return a reference to an internal list of alpm_depend_t structures.
@@ -1397,8 +1346,6 @@ int alpm_pkg_has_scriptlet(alpm_pkg_t *pkg);
*/
off_t alpm_pkg_download_size(alpm_pkg_t *newpkg);
-alpm_list_t *alpm_pkg_unused_deltas(alpm_pkg_t *pkg);
-
/** Set install reason for a package in the local database.
* The provided package object must be from the local database or this method
* will fail. The write to the local database is performed immediately.
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index deaec27c..9db271b9 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -37,7 +37,6 @@
#include "alpm_list.h"
#include "package.h"
#include "handle.h"
-#include "delta.h"
#include "deps.h"
#include "dload.h"
#include "filelist.h"
@@ -427,9 +426,8 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
/* This function doesn't work as well as one might think, as size of database
* entries varies considerably. Adding signatures nearly doubles the size of a
- * single entry; deltas also can make for large variations in size. These
- * current values are heavily influenced by Arch Linux; databases with no
- * deltas and a single signature per package. */
+ * single entry. These current values are heavily influenced by Arch Linux;
+ * databases with a single signature per package. */
static size_t estimate_package_count(struct stat *st, struct archive *archive)
{
int per_package;
@@ -511,7 +509,7 @@ static int sync_db_populate(alpm_db_t *db)
while((archive_ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
mode_t mode = archive_entry_mode(entry);
if(!S_ISDIR(mode)) {
- /* we have desc, depends or deltas - parse it */
+ /* we have desc or depends - parse it */
if(sync_db_read(db, archive, entry, &pkg) != 0) {
_alpm_log(db->handle, ALPM_LOG_ERROR,
_("could not parse package description file '%s' from db '%s'\n"),
@@ -637,8 +635,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
}
if(strcmp(filename, "desc") == 0 || strcmp(filename, "depends") == 0
- || strcmp(filename, "files") == 0
- || (strcmp(filename, "deltas") == 0 && db->handle->deltaratio > 0.0) ) {
+ || strcmp(filename, "files") == 0) {
int ret;
while((ret = _alpm_archive_fgets(archive, &buf)) == ARCHIVE_OK) {
char *line = buf.line;
@@ -707,14 +704,6 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
READ_AND_SPLITDEP(pkg->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
READ_AND_SPLITDEP(pkg->provides);
- } else if(strcmp(line, "%DELTAS%") == 0) {
- /* Different than the rest because of the _alpm_delta_parse call. */
- while(1) {
- READ_NEXT();
- if(strlen(line) == 0) break;
- pkg->deltas = alpm_list_add(pkg->deltas,
- _alpm_delta_parse(db->handle, line));
- }
} else if(strcmp(line, "%FILES%") == 0) {
/* TODO: this could lazy load if there is future demand */
size_t files_count = 0, files_size = 0;
@@ -751,8 +740,6 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
goto error;
}
*likely_pkg = pkg;
- } else if(strcmp(filename, "deltas") == 0) {
- /* skip reading delta files if UseDelta is unset */
} else {
/* unknown database file */
_alpm_log(db->handle, ALPM_LOG_DEBUG, "unknown database file: %s\n", filename);
diff --git a/lib/libalpm/delta.c b/lib/libalpm/delta.c
deleted file mode 100644
index 33da4a3f..00000000
--- a/lib/libalpm/delta.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * delta.c
- *
- * Copyright (c) 2006-2018 Pacman Development Team <pacman-dev at archlinux.org>
- * Copyright (c) 2007-2006 by Judd Vinet <jvinet at zeroflux.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h> /* intmax_t */
-#include <limits.h>
-#include <sys/types.h>
-#include <regex.h>
-
-/* libalpm */
-#include "delta.h"
-#include "alpm_list.h"
-#include "util.h"
-#include "log.h"
-#include "graph.h"
-
-static alpm_list_t *graph_init(alpm_list_t *deltas, int reverse)
-{
- alpm_list_t *i, *j;
- alpm_list_t *vertices = NULL;
- /* create the vertices */
- for(i = deltas; i; i = i->next) {
- alpm_graph_t *v = _alpm_graph_new();
- if(!v) {
- alpm_list_free(vertices);
- return NULL;
- }
- alpm_delta_t *vdelta = i->data;
- vdelta->download_size = vdelta->delta_size;
- v->weight = LONG_MAX;
- v->data = vdelta;
- vertices = alpm_list_add(vertices, v);
- }
-
- /* compute the edges */
- for(i = vertices; i; i = i->next) {
- alpm_graph_t *v_i = i->data;
- alpm_delta_t *d_i = v_i->data;
- /* loop a second time so we make all possible comparisons */
- for(j = vertices; j; j = j->next) {
- alpm_graph_t *v_j = j->data;
- alpm_delta_t *d_j = v_j->data;
- /* We want to create a delta tree like the following:
- * 1_to_2
- * |
- * 1_to_3 2_to_3
- * \ /
- * 3_to_4
- * If J 'from' is equal to I 'to', then J is a child of I.
- * */
- if((!reverse && strcmp(d_j->from, d_i->to) == 0) ||
- (reverse && strcmp(d_j->to, d_i->from) == 0)) {
- v_i->children = alpm_list_add(v_i->children, v_j);
- }
- }
- v_i->iterator = v_i->children;
- }
- return vertices;
-}
-
-static void graph_init_size(alpm_handle_t *handle, alpm_list_t *vertices)
-{
- alpm_list_t *i;
-
- for(i = vertices; i; i = i->next) {
- char *fpath, *md5sum;
- alpm_graph_t *v = i->data;
- alpm_delta_t *vdelta = v->data;
-
- /* determine whether the delta file already exists */
- fpath = _alpm_filecache_find(handle, vdelta->delta);
- if(fpath) {
- md5sum = alpm_compute_md5sum(fpath);
- if(md5sum && strcmp(md5sum, vdelta->delta_md5) == 0) {
- vdelta->download_size = 0;
- }
- FREE(md5sum);
- FREE(fpath);
- } else {
- char *fnamepart;
- CALLOC(fnamepart, strlen(vdelta->delta) + 6, sizeof(char), return);
- sprintf(fnamepart, "%s.part", vdelta->delta);
- fpath = _alpm_filecache_find(handle, fnamepart);
- if(fpath) {
- struct stat st;
- if(stat(fpath, &st) == 0) {
- vdelta->download_size = vdelta->delta_size - st.st_size;
- vdelta->download_size = vdelta->download_size < 0 ? 0 : vdelta->download_size;
- }
- FREE(fpath);
- }
- FREE(fnamepart);
- }
-
- /* determine whether a base 'from' file exists */
- fpath = _alpm_filecache_find(handle, vdelta->from);
- if(fpath) {
- v->weight = vdelta->download_size;
- }
- FREE(fpath);
- }
-}
-
-
-static void dijkstra(alpm_list_t *vertices)
-{
- alpm_list_t *i;
- alpm_graph_t *v;
- while(1) {
- v = NULL;
- /* find the smallest vertice not visited yet */
- for(i = vertices; i; i = i->next) {
- alpm_graph_t *v_i = i->data;
-
- if(v_i->state == ALPM_GRAPH_STATE_PROCESSING) {
- continue;
- }
-
- if(v == NULL || v_i->weight < v->weight) {
- v = v_i;
- }
- }
- if(v == NULL || v->weight == LONG_MAX) {
- break;
- }
-
- v->state = ALPM_GRAPH_STATE_PROCESSING;
-
- v->iterator = v->children;
- while(v->iterator) {
- alpm_graph_t *v_c = v->iterator->data;
- alpm_delta_t *d_c = v_c->data;
- if(v_c->weight > v->weight + d_c->download_size) {
- v_c->weight = v->weight + d_c->download_size;
- v_c->parent = v;
- }
-
- v->iterator = (v->iterator)->next;
-
- }
- }
-}
-
-static off_t shortest_path(alpm_list_t *vertices, const char *to, alpm_list_t **path)
-{
- alpm_list_t *i;
- alpm_graph_t *v = NULL;
- off_t bestsize = 0;
- alpm_list_t *rpath = NULL;
-
- for(i = vertices; i; i = i->next) {
- alpm_graph_t *v_i = i->data;
- alpm_delta_t *d_i = v_i->data;
-
- if(strcmp(d_i->to, to) == 0) {
- if(v == NULL || v_i->weight < v->weight) {
- v = v_i;
- bestsize = v->weight;
- }
- }
- }
-
- while(v != NULL) {
- alpm_delta_t *vdelta = v->data;
- rpath = alpm_list_add(rpath, vdelta);
- v = v->parent;
- }
- *path = alpm_list_reverse(rpath);
- alpm_list_free(rpath);
-
- return bestsize;
-}
-
-/** Calculates the shortest path from one version to another.
- * The shortest path is defined as the path with the smallest combined
- * size, not the length of the path.
- * @param handle the context handle
- * @param deltas the list of alpm_delta_t * objects that a file has
- * @param to the file to start the search at
- * @param path the pointer to a list location where alpm_delta_t * objects that
- * have the smallest size are placed. NULL is set if there is no path
- * possible with the files available.
- * @return the size of the path stored, or LONG_MAX if path is unfindable
- */
-off_t _alpm_shortest_delta_path(alpm_handle_t *handle, alpm_list_t *deltas,
- const char *to, alpm_list_t **path)
-{
- alpm_list_t *bestpath = NULL;
- alpm_list_t *vertices;
- off_t bestsize = LONG_MAX;
-
- if(deltas == NULL) {
- *path = NULL;
- return bestsize;
- }
-
- _alpm_log(handle, ALPM_LOG_DEBUG, "started delta shortest-path search for '%s'\n", to);
-
- vertices = graph_init(deltas, 0);
- graph_init_size(handle, vertices);
- dijkstra(vertices);
- bestsize = shortest_path(vertices, to, &bestpath);
-
- _alpm_log(handle, ALPM_LOG_DEBUG, "delta shortest-path search complete : '%jd'\n", (intmax_t)bestsize);
-
- alpm_list_free_inner(vertices, _alpm_graph_free);
- alpm_list_free(vertices);
-
- *path = bestpath;
- return bestsize;
-}
-
-static alpm_list_t *find_unused(alpm_list_t *deltas, const char *to, off_t quota)
-{
- alpm_list_t *unused = NULL;
- alpm_list_t *vertices;
- alpm_list_t *i;
- vertices = graph_init(deltas, 1);
-
- for(i = vertices; i; i = i->next) {
- alpm_graph_t *v = i->data;
- alpm_delta_t *vdelta = v->data;
- if(strcmp(vdelta->to, to) == 0) {
- v->weight = vdelta->download_size;
- }
- }
- dijkstra(vertices);
- for(i = vertices; i; i = i->next) {
- alpm_graph_t *v = i->data;
- alpm_delta_t *vdelta = v->data;
- if(v->weight > quota) {
- unused = alpm_list_add(unused, vdelta->delta);
- }
- }
- alpm_list_free_inner(vertices, _alpm_graph_free);
- alpm_list_free(vertices);
- return unused;
-}
-
-/** \addtogroup alpm_deltas Delta Functions
- * @brief Functions to manipulate libalpm deltas
- * @{
- */
-
-alpm_list_t SYMEXPORT *alpm_pkg_unused_deltas(alpm_pkg_t *pkg)
-{
- ASSERT(pkg != NULL, return NULL);
- return find_unused(pkg->deltas, pkg->filename,
- pkg->size * pkg->handle->deltaratio);
-}
-
-/** @} */
-
-#define NUM_MATCHES 6
-
-/** Parses the string representation of a alpm_delta_t object.
- * This function assumes that the string is in the correct format.
- * This format is as follows:
- * $deltafile $deltamd5 $deltasize $oldfile $newfile
- * @param handle the context handle
- * @param line the string to parse
- * @return A pointer to the new alpm_delta_t object
- */
-alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line)
-{
- alpm_delta_t *delta;
- size_t len;
- regmatch_t pmatch[NUM_MATCHES];
- char filesize[32];
-
- /* this is so we only have to compile the pattern once */
- if(!handle->delta_regex_compiled) {
- /* $deltafile $deltamd5 $deltasize $oldfile $newfile*/
- regcomp(&handle->delta_regex,
- "^([^[:space:]]+) ([[:xdigit:]]{32}) ([[:digit:]]+)"
- " ([^[:space:]]+) ([^[:space:]]+)$",
- REG_EXTENDED | REG_NEWLINE);
- handle->delta_regex_compiled = 1;
- }
-
- if(regexec(&handle->delta_regex, line, NUM_MATCHES, pmatch, 0) != 0) {
- /* delta line is invalid, return NULL */
- return NULL;
- }
-
- CALLOC(delta, 1, sizeof(alpm_delta_t), return NULL);
-
- /* start at index 1 -- match 0 is the entire match */
- len = pmatch[1].rm_eo - pmatch[1].rm_so;
- STRNDUP(delta->delta, &line[pmatch[1].rm_so], len, goto error);
-
- len = pmatch[2].rm_eo - pmatch[2].rm_so;
- STRNDUP(delta->delta_md5, &line[pmatch[2].rm_so], len, goto error);
-
- len = pmatch[3].rm_eo - pmatch[3].rm_so;
- if(len < sizeof(filesize)) {
- strncpy(filesize, &line[pmatch[3].rm_so], len);
- filesize[len] = '\0';
- delta->delta_size = _alpm_strtoofft(filesize);
- }
-
- len = pmatch[4].rm_eo - pmatch[4].rm_so;
- STRNDUP(delta->from, &line[pmatch[4].rm_so], len, goto error);
-
- len = pmatch[5].rm_eo - pmatch[5].rm_so;
- STRNDUP(delta->to, &line[pmatch[5].rm_so], len, goto error);
-
- return delta;
-
-error:
- _alpm_delta_free(delta);
- return NULL;
-}
-
-#undef NUM_MATCHES
-
-void _alpm_delta_free(alpm_delta_t *delta)
-{
- ASSERT(delta != NULL, return);
- FREE(delta->delta);
- FREE(delta->delta_md5);
- FREE(delta->from);
- FREE(delta->to);
- FREE(delta);
-}
-
-alpm_delta_t *_alpm_delta_dup(const alpm_delta_t *delta)
-{
- alpm_delta_t *newdelta;
- CALLOC(newdelta, 1, sizeof(alpm_delta_t), return NULL);
- STRDUP(newdelta->delta, delta->delta, goto error);
- STRDUP(newdelta->delta_md5, delta->delta_md5, goto error);
- STRDUP(newdelta->from, delta->from, goto error);
- STRDUP(newdelta->to, delta->to, goto error);
- newdelta->delta_size = delta->delta_size;
- newdelta->download_size = delta->download_size;
-
- return newdelta;
-
-error:
- _alpm_delta_free(newdelta);
- return NULL;
-}
diff --git a/lib/libalpm/delta.h b/lib/libalpm/delta.h
deleted file mode 100644
index d80c0745..00000000
--- a/lib/libalpm/delta.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * delta.h
- *
- * Copyright (c) 2006-2018 Pacman Development Team <pacman-dev at archlinux.org>
- * Copyright (c) 2007-2006 by Judd Vinet <jvinet at zeroflux.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef ALPM_DELTA_H
-#define ALPM_DELTA_H
-
-#include <sys/types.h> /* off_t */
-
-#include "alpm.h"
-
-alpm_delta_t *_alpm_delta_parse(alpm_handle_t *handle, const char *line);
-void _alpm_delta_free(alpm_delta_t *delta);
-alpm_delta_t *_alpm_delta_dup(const alpm_delta_t *delta);
-off_t _alpm_shortest_delta_path(alpm_handle_t *handle, alpm_list_t *deltas,
- const char *to, alpm_list_t **path);
-
-#endif /* ALPM_DELTA_H */
diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c
index 95be9d7b..a5c6f4fe 100644
--- a/lib/libalpm/error.c
+++ b/lib/libalpm/error.c
@@ -130,11 +130,6 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
return _("missing PGP signature");
case ALPM_ERR_SIG_INVALID:
return _("invalid PGP signature");
- /* Deltas */
- case ALPM_ERR_DLT_INVALID:
- return _("invalid or corrupted delta");
- case ALPM_ERR_DLT_PATCHFAILED:
- return _("delta patch failed");
/* Dependencies */
case ALPM_ERR_UNSATISFIED_DEPS:
return _("could not satisfy dependencies");
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index c491d87c..476779c4 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -34,7 +34,6 @@
#include "alpm_list.h"
#include "util.h"
#include "log.h"
-#include "delta.h"
#include "trans.h"
#include "alpm.h"
#include "deps.h"
@@ -44,7 +43,6 @@ alpm_handle_t *_alpm_handle_new(void)
alpm_handle_t *handle;
CALLOC(handle, 1, sizeof(alpm_handle_t), return NULL);
- handle->deltaratio = 0.0;
handle->lockfd = -1;
return handle;
@@ -75,8 +73,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
FREELIST(handle->known_keys);
#endif
- regfree(&handle->delta_regex);
-
/* free memory */
_alpm_trans_free(handle->trans);
FREE(handle->root);
@@ -303,12 +299,6 @@ const char SYMEXPORT *alpm_option_get_arch(alpm_handle_t *handle)
return handle->arch;
}
-double SYMEXPORT alpm_option_get_deltaratio(alpm_handle_t *handle)
-{
- CHECK_HANDLE(handle, return -1);
- return handle->deltaratio;
-}
-
int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
@@ -755,16 +745,6 @@ int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch)
return 0;
}
-int SYMEXPORT alpm_option_set_deltaratio(alpm_handle_t *handle, double ratio)
-{
- CHECK_HANDLE(handle, return -1);
- if(ratio < 0.0 || ratio > 2.0) {
- RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1);
- }
- handle->deltaratio = ratio;
- return 0;
-}
-
alpm_db_t SYMEXPORT *alpm_get_localdb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
index 44c4904b..14d20bbe 100644
--- a/lib/libalpm/handle.h
+++ b/lib/libalpm/handle.h
@@ -95,7 +95,6 @@ struct __alpm_handle_t {
/* options */
char *arch; /* Architecture of packages we should allow */
- double deltaratio; /* Download deltas if possible; a ratio value */
int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
int checkspace; /* Check disk space before installing */
char *dbext; /* Sync DB extension */
@@ -110,10 +109,6 @@ struct __alpm_handle_t {
/* lock file descriptor */
int lockfd;
-
- /* for delta parsing efficiency */
- int delta_regex_compiled;
- regex_t delta_regex;
};
alpm_handle_t *_alpm_handle_new(void);
diff --git a/lib/libalpm/meson.build b/lib/libalpm/meson.build
index 84c3dde3..607e91a3 100644
--- a/lib/libalpm/meson.build
+++ b/lib/libalpm/meson.build
@@ -9,7 +9,6 @@ libalpm_sources = files('''
be_sync.c
conflict.h conflict.c
db.h db.c
- delta.h delta.c
deps.h deps.c
diskspace.h diskspace.c
dload.h dload.c
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index 97a78781..94716666 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -31,7 +31,6 @@
#include "log.h"
#include "util.h"
#include "db.h"
-#include "delta.h"
#include "handle.h"
#include "deps.h"
@@ -374,13 +373,6 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(alpm_pkg_t *pkg)
return pkg->ops->get_replaces(pkg);
}
-alpm_list_t SYMEXPORT *alpm_pkg_get_deltas(alpm_pkg_t *pkg)
-{
- ASSERT(pkg != NULL, return NULL);
- pkg->handle->pm_errno = ALPM_ERR_OK;
- return pkg->deltas;
-}
-
alpm_filelist_t SYMEXPORT *alpm_pkg_get_files(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -620,9 +612,6 @@ int _alpm_pkg_dup(alpm_pkg_t *pkg, alpm_pkg_t **new_ptr)
newpkg->optdepends = list_depdup(pkg->optdepends);
newpkg->conflicts = list_depdup(pkg->conflicts);
newpkg->provides = list_depdup(pkg->provides);
- for(i = pkg->deltas; i; i = i->next) {
- newpkg->deltas = alpm_list_add(newpkg->deltas, _alpm_delta_dup(i->data));
- }
if(pkg->files.count) {
size_t filenum;
@@ -696,9 +685,6 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
free_deplist(pkg->optdepends);
free_deplist(pkg->conflicts);
free_deplist(pkg->provides);
- alpm_list_free_inner(pkg->deltas, (alpm_list_fn_free)_alpm_delta_free);
- alpm_list_free(pkg->deltas);
- alpm_list_free(pkg->delta_path);
alpm_list_free(pkg->removes);
_alpm_pkg_free(pkg->oldpkg);
diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h
index fbcde266..bc66a569 100644
--- a/lib/libalpm/package.h
+++ b/lib/libalpm/package.h
@@ -118,8 +118,6 @@ struct __alpm_pkg_t {
alpm_list_t *makedepends;
alpm_list_t *conflicts;
alpm_list_t *provides;
- alpm_list_t *deltas;
- alpm_list_t *delta_path;
alpm_list_t *removes; /* in transaction targets only */
alpm_pkg_t *oldpkg; /* in transaction targets only */
diff --git a/lib/libalpm/po/POTFILES.in b/lib/libalpm/po/POTFILES.in
index b6108629..0fa444ed 100644
--- a/lib/libalpm/po/POTFILES.in
+++ b/lib/libalpm/po/POTFILES.in
@@ -12,7 +12,6 @@ lib/libalpm/be_package.c
lib/libalpm/be_sync.c
lib/libalpm/conflict.c
lib/libalpm/db.c
-lib/libalpm/delta.c
lib/libalpm/deps.c
lib/libalpm/diskspace.c
lib/libalpm/dload.c
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index de579eac..cbd072e6 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -43,7 +43,6 @@
#include "handle.h"
#include "alpm.h"
#include "dload.h"
-#include "delta.h"
#include "remove.h"
#include "diskspace.h"
#include "signing.h"
@@ -351,21 +350,6 @@ static int compute_download_size(alpm_pkg_t *newpkg)
/* tell the caller that we have a partial */
ret = 1;
- } else if(handle->deltaratio > 0.0) {
- off_t dltsize;
-
- dltsize = _alpm_shortest_delta_path(handle, newpkg->deltas,
- newpkg->filename, &newpkg->delta_path);
-
- if(newpkg->delta_path && (dltsize < newpkg->size * handle->deltaratio)) {
- _alpm_log(handle, ALPM_LOG_DEBUG, "using delta size\n");
- size = dltsize;
- } else {
- _alpm_log(handle, ALPM_LOG_DEBUG, "using package size\n");
- size = newpkg->size;
- alpm_list_free(newpkg->delta_path);
- newpkg->delta_path = NULL;
- }
} else {
size = newpkg->size;
}
@@ -696,118 +680,6 @@ off_t SYMEXPORT alpm_pkg_download_size(alpm_pkg_t *newpkg)
return newpkg->download_size;
}
-static int endswith(const char *filename, const char *extension)
-{
- const char *s = filename + strlen(filename) - strlen(extension);
- return strcmp(s, extension) == 0;
-}
-
-/** Applies delta files to create an upgraded package file.
- *
- * All intermediate files are deleted, leaving only the starting and
- * ending package files.
- *
- * @param handle the context handle
- *
- * @return 0 if all delta files were able to be applied, 1 otherwise.
- */
-static int apply_deltas(alpm_handle_t *handle)
-{
- alpm_list_t *i;
- size_t deltas_found = 0;
- int ret = 0;
- const char *cachedir = _alpm_filecache_setup(handle);
- alpm_trans_t *trans = handle->trans;
- alpm_event_delta_patch_t event;
-
- for(i = trans->add; i; i = i->next) {
- alpm_pkg_t *spkg = i->data;
- alpm_list_t *delta_path = spkg->delta_path;
- alpm_list_t *dlts = NULL;
-
- if(!delta_path) {
- continue;
- }
-
- if(!deltas_found) {
- /* only show this if we actually have deltas to apply, and it is before
- * the very first one */
- event.type = ALPM_EVENT_DELTA_PATCHES_START;
- EVENT(handle, &event);
- deltas_found = 1;
- }
-
- for(dlts = delta_path; dlts; dlts = dlts->next) {
- alpm_delta_t *d = dlts->data;
- char *delta, *from, *to;
- char command[PATH_MAX];
- size_t len = 0;
-
- delta = _alpm_filecache_find(handle, d->delta);
- /* the initial package might be in a different cachedir */
- if(dlts == delta_path) {
- from = _alpm_filecache_find(handle, d->from);
- } else {
- /* len = cachedir len + from len + '/' + null */
- len = strlen(cachedir) + strlen(d->from) + 2;
- MALLOC(from, len, free(delta); RET_ERR(handle, ALPM_ERR_MEMORY, 1));
- snprintf(from, len, "%s/%s", cachedir, d->from);
- }
- len = strlen(cachedir) + strlen(d->to) + 2;
- MALLOC(to, len, free(delta); free(from); RET_ERR(handle, ALPM_ERR_MEMORY, 1));
- snprintf(to, len, "%s/%s", cachedir, d->to);
-
- /* build the patch command */
- if(endswith(to, ".gz")) {
- /* special handling for gzip : we disable timestamp with -n option */
- snprintf(command, PATH_MAX, "xdelta3 -d -q -R -c -s %s %s | gzip -n > %s", from, delta, to);
- } else {
- snprintf(command, PATH_MAX, "xdelta3 -d -q -s %s %s %s", from, delta, to);
- }
-
- _alpm_log(handle, ALPM_LOG_DEBUG, "command: %s\n", command);
-
- event.type = ALPM_EVENT_DELTA_PATCH_START;
- event.delta = d;
- EVENT(handle, &event);
-
- int retval = system(command);
- if(retval == 0) {
- event.type = ALPM_EVENT_DELTA_PATCH_DONE;
- EVENT(handle, &event);
-
- /* delete the delta file */
- unlink(delta);
-
- /* Delete the 'from' package but only if it is an intermediate
- * package. The starting 'from' package should be kept, just
- * as if deltas were not used. */
- if(dlts != delta_path) {
- unlink(from);
- }
- }
- FREE(from);
- FREE(to);
- FREE(delta);
-
- if(retval != 0) {
- /* one delta failed for this package, cancel the remaining ones */
- event.type = ALPM_EVENT_DELTA_PATCH_FAILED;
- EVENT(handle, &event);
- handle->pm_errno = ALPM_ERR_DLT_PATCHFAILED;
- ret = 1;
- break;
- }
- }
- }
- if(deltas_found) {
- event.type = ALPM_EVENT_DELTA_PATCHES_DONE;
- EVENT(handle, &event);
- }
-
- return ret;
-}
-
/**
* Prompts to delete the file now that we know it is invalid.
* @param handle the context handle
@@ -832,44 +704,6 @@ static int prompt_to_delete(alpm_handle_t *handle, const char *filepath,
return question.remove;
}
-static int validate_deltas(alpm_handle_t *handle, alpm_list_t *deltas)
-{
- alpm_list_t *i, *errors = NULL;
- alpm_event_t event;
-
- if(!deltas) {
- return 0;
- }
-
- /* Check integrity of deltas */
- event.type = ALPM_EVENT_DELTA_INTEGRITY_START;
- EVENT(handle, &event);
- for(i = deltas; i; i = i->next) {
- alpm_delta_t *d = i->data;
- char *filepath = _alpm_filecache_find(handle, d->delta);
-
- if(_alpm_test_checksum(filepath, d->delta_md5, ALPM_PKG_VALIDATION_MD5SUM)) {
- errors = alpm_list_add(errors, filepath);
- } else {
- FREE(filepath);
- }
- }
- event.type = ALPM_EVENT_DELTA_INTEGRITY_DONE;
- EVENT(handle, &event);
-
- if(errors) {
- for(i = errors; i; i = i->next) {
- char *filepath = i->data;
- prompt_to_delete(handle, filepath, ALPM_ERR_DLT_INVALID);
- FREE(filepath);
- }
- alpm_list_free(errors);
- handle->pm_errno = ALPM_ERR_DLT_INVALID;
- return -1;
- }
- return 0;
-}
-
static struct dload_payload *build_payload(alpm_handle_t *handle,
const char *filename, size_t size, alpm_list_t *servers)
{
@@ -882,7 +716,7 @@ static struct dload_payload *build_payload(alpm_handle_t *handle,
return payload;
}
-static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files, alpm_list_t **deltas)
+static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files)
{
alpm_list_t *i;
alpm_handle_t *handle = repo->handle;
@@ -891,8 +725,6 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files, alpm_list_t
alpm_pkg_t *spkg = i->data;
if(spkg->origin != ALPM_PKG_FROM_FILE && repo == spkg->origin_data.db) {
- alpm_list_t *delta_path = spkg->delta_path;
-
if(!repo->servers) {
handle->pm_errno = ALPM_ERR_SERVER_NONE;
_alpm_log(handle, ALPM_LOG_ERROR, "%s: %s\n",
@@ -900,22 +732,7 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files, alpm_list_t
return 1;
}
- if(delta_path) {
- /* using deltas */
- alpm_list_t *dlts;
- for(dlts = delta_path; dlts; dlts = dlts->next) {
- alpm_delta_t *delta = dlts->data;
- if(delta->download_size != 0) {
- struct dload_payload *payload = build_payload(
- handle, delta->delta, delta->delta_size, repo->servers);
- ASSERT(payload, return -1);
- *files = alpm_list_add(*files, payload);
- }
- /* keep a list of all the delta files for md5sums */
- *deltas = alpm_list_add(*deltas, delta);
- }
-
- } else if(spkg->download_size != 0) {
+ if(spkg->download_size != 0) {
struct dload_payload *payload;
ASSERT(spkg->filename != NULL, RET_ERR(handle, ALPM_ERR_PKG_INVALID_NAME, -1));
payload = build_payload(handle, spkg->filename, spkg->size, repo->servers);
@@ -963,7 +780,7 @@ static int download_single_file(alpm_handle_t *handle, struct dload_payload *pay
return -1;
}
-static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
+static int download_files(alpm_handle_t *handle)
{
const char *cachedir;
alpm_list_t *i, *files = NULL;
@@ -987,7 +804,7 @@ static int download_files(alpm_handle_t *handle, alpm_list_t **deltas)
}
for(i = handle->dbs_sync; i; i = i->next) {
- errors += find_dl_candidates(i->data, &files, deltas);
+ errors += find_dl_candidates(i->data, &files);
}
if(files) {
@@ -1309,24 +1126,12 @@ static int load_packages(alpm_handle_t *handle, alpm_list_t **data,
int _alpm_sync_load(alpm_handle_t *handle, alpm_list_t **data)
{
- alpm_list_t *i, *deltas = NULL;
+ alpm_list_t *i;
size_t total = 0;
uint64_t total_bytes = 0;
alpm_trans_t *trans = handle->trans;
- if(download_files(handle, &deltas)) {
- alpm_list_free(deltas);
- return -1;
- }
-
- if(validate_deltas(handle, deltas)) {
- alpm_list_free(deltas);
- return -1;
- }
- alpm_list_free(deltas);
-
- /* Use the deltas to generate the packages */
- if(apply_deltas(handle)) {
+ if(download_files(handle)) {
return -1;
}
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index b8e3dd73..22865614 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -347,14 +347,6 @@ void cb_event(alpm_event_t *event)
case ALPM_EVENT_PKGDOWNLOAD_START:
case ALPM_EVENT_PKGDOWNLOAD_DONE:
case ALPM_EVENT_PKGDOWNLOAD_FAILED:
- /* temporary until removed from libalpm */
- case ALPM_EVENT_DELTA_INTEGRITY_START:
- case ALPM_EVENT_DELTA_INTEGRITY_DONE:
- case ALPM_EVENT_DELTA_PATCHES_START:
- case ALPM_EVENT_DELTA_PATCHES_DONE:
- case ALPM_EVENT_DELTA_PATCH_START:
- case ALPM_EVENT_DELTA_PATCH_DONE:
- case ALPM_EVENT_DELTA_PATCH_FAILED:
/* nothing */
break;
}
--
2.20.1
More information about the pacman-dev
mailing list