Similar to an earlier commit which accounts for .part files for full
packages, calculate the download_size for deltas keeping mind the
possibility of a partial transfer.

Signed-off-by: Dave Reisner <[email protected]>
---
 lib/libalpm/delta.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/lib/libalpm/delta.c b/lib/libalpm/delta.c
index 1ff4fde..da957bc 100644
--- a/lib/libalpm/delta.c
+++ b/lib/libalpm/delta.c
@@ -89,12 +89,27 @@ static void graph_init_size(alpm_handle_t *handle, 
alpm_list_t *vertices)
 
                /* determine whether the delta file already exists */
                fpath = _alpm_filecache_find(handle, vdelta->delta);
-               md5sum = alpm_compute_md5sum(fpath);
-               if(fpath && md5sum && strcmp(md5sum, vdelta->delta_md5) == 0) {
-                       vdelta->download_size = 0;
+               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;
+                               }
+                               FREE(fpath);
+                       }
+                       FREE(fnamepart);
                }
-               FREE(fpath);
-               FREE(md5sum);
 
                /* determine whether a base 'from' file exists */
                fpath = _alpm_filecache_find(handle, vdelta->from);
-- 
1.7.6.1


Reply via email to