mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-23 00:08:50 -05:00
701a03dcdb
Using the graph structures that Nagy set up for dependency sorting, we now do a similar process for deltas. Load up all of the deltas into a graph object on which we can then apply Dijkstra's algorithm, using the new weight field of graph struct. We initialize the nodes weight using the base files that we can use in our filecache (both filename and md5sum must match). The algorithm then picks the best path among those that can be resolved. Note that this algorithm has a few advantages over the old one: 1. It is completely file agnostic. These delta chains do not have to consist of package files- this could be adopted to do delta-fied DBs. 2. It does not use the local_db anymore, or even care if a package or file is currently installed. Instead, it only looks in the filecache for files and packages that match delta chain entries. Original-work-by: Dan McGee <dan@archlinux.org> Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
/*
|
|
* delta.h
|
|
*
|
|
* Copyright (c) 2007-2008 by Judd Vinet <jvinet@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 "alpm.h"
|
|
|
|
struct __pmdelta_t {
|
|
/** filename of the 'before' file */
|
|
char *from;
|
|
/** md5sum of the 'before' file */
|
|
char *from_md5;
|
|
/** filename of the 'after' file */
|
|
char *to;
|
|
/** md5sum of the 'after' file */
|
|
char *to_md5;
|
|
/** filename of the delta patch */
|
|
char *delta;
|
|
/** md5sum of the delta file */
|
|
char *delta_md5;
|
|
/** filesize of the delta file */
|
|
unsigned long delta_size;
|
|
/** download filesize of the delta file */
|
|
unsigned long download_size;
|
|
};
|
|
|
|
pmdelta_t *_alpm_delta_parse(char *line);
|
|
void _alpm_delta_free(pmdelta_t *delta);
|
|
unsigned long _alpm_shortest_delta_path(alpm_list_t *deltas,
|
|
const char *to, const char *to_md5, alpm_list_t **path);
|
|
|
|
#endif /* _ALPM_DELTA_H */
|
|
|
|
/* vim: set ts=2 sw=2 noet: */
|