]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Parse media number from baseurl
authorMichael Schroeder <mls@suse.de>
Tue, 9 Feb 2016 12:41:13 +0000 (13:41 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 9 Feb 2016 12:41:13 +0000 (13:41 +0100)
Use 'createrepo -u media:// --split dir1 dir2...' to create
a multi-volume repository.

ext/repo_rpmmd.c

index 4272b6f15718897ce980ac86ddcc269443fc7554..a45d491e94f3ab2f876dc8d80bfd3140ddbf0e23 100644 (file)
@@ -776,10 +776,20 @@ startElement(void *userData, const char *name, const char **atts)
       str = find_attr("href", atts);
       if (str)
        {
-         repodata_set_location(pd->data, handle, 0, 0, str);
-         str = find_attr("xml:base", atts);
-         if (str)
-           repodata_set_poolstr(pd->data, handle, SOLVABLE_MEDIABASE, str);
+         int medianr = 0;
+         const char *base = find_attr("xml:base", atts);
+         if (base  && !strncmp(base, "media:", 6))
+           {
+             /* check for the media number in the fragment */
+             int l = strlen(base);
+             while (l && base[l - 1] >= '0' && base[l - 1] <= '9')
+               l--;
+             if (l && base[l - 1] == '#' && base[l])
+               medianr = atoi(base + l);
+           }
+         repodata_set_location(pd->data, handle, medianr, 0, str);
+         if (base)
+           repodata_set_poolstr(pd->data, handle, SOLVABLE_MEDIABASE, base);
        }
       break;
     case STATE_CHECKSUM: