|
Lines 98-107
Link Here
|
| 98 |
void fetch(const char *, const char *); |
98 |
void fetch(const char *, const char *); |
| 99 |
void qmerge_initialize(const char *); |
99 |
void qmerge_initialize(const char *); |
| 100 |
char *best_version(const char *, const char *); |
100 |
char *best_version(const char *, const char *); |
|
|
101 |
void pkg_fetch(int, depend_atom *, struct pkg_t *); |
| 101 |
void pkg_merge(int, depend_atom *, struct pkg_t *); |
102 |
void pkg_merge(int, depend_atom *, struct pkg_t *); |
| 102 |
int pkg_unmerge(char *, char *); |
103 |
int pkg_unmerge(char *, char *); |
| 103 |
int unlink_empty(char *); |
104 |
int unlink_empty(char *); |
| 104 |
void pkg_fetch(int, char **, struct pkg_t *); |
105 |
void pkg_process(int, char **, struct pkg_t *); |
| 105 |
void print_Pkg(int, struct pkg_t *); |
106 |
void print_Pkg(int, struct pkg_t *); |
| 106 |
int parse_packages(const char *, int, char **); |
107 |
int parse_packages(const char *, int, char **); |
| 107 |
int config_protected(const char *, int, char **); |
108 |
int config_protected(const char *, int, char **); |
|
Lines 509-515
Link Here
|
| 509 |
IF_DEBUG(fprintf(stderr, "+Installed: %s\n", p)); |
510 |
IF_DEBUG(fprintf(stderr, "+Installed: %s\n", p)); |
| 510 |
if (strlen(p) < 1) |
511 |
if (strlen(p) < 1) |
| 511 |
if (!((strcmp(pkg->PF, subpkg->PF) == 0) && (strcmp(pkg->CATEGORY, subpkg->CATEGORY) == 0))) |
512 |
if (!((strcmp(pkg->PF, subpkg->PF) == 0) && (strcmp(pkg->CATEGORY, subpkg->CATEGORY) == 0))) |
| 512 |
pkg_merge(level+1, ratom, subpkg); |
513 |
pkg_fetch(level+1, ratom, subpkg); |
| 513 |
|
514 |
|
| 514 |
atom_implode(subatom); |
515 |
atom_implode(subatom); |
| 515 |
atom_implode(ratom); |
516 |
atom_implode(ratom); |
|
Lines 1004-1026
Link Here
|
| 1004 |
return ret; |
1005 |
return ret; |
| 1005 |
} |
1006 |
} |
| 1006 |
|
1007 |
|
| 1007 |
void pkg_fetch(int argc, char **argv, struct pkg_t *pkg) |
1008 |
void pkg_process(int argc, char **argv, struct pkg_t *pkg) |
| 1008 |
{ |
1009 |
{ |
| 1009 |
depend_atom *atom; |
1010 |
depend_atom *atom; |
| 1010 |
char savecwd[_POSIX_PATH_MAX]; |
1011 |
char buf[255]; |
| 1011 |
char buf[255], str[255]; |
|
|
| 1012 |
int i; |
1012 |
int i; |
| 1013 |
|
1013 |
|
| 1014 |
memset(buf, 0, sizeof(buf)); |
1014 |
memset(buf, 0, sizeof(buf)); |
| 1015 |
memset(str, 0, sizeof(str)); |
|
|
| 1016 |
|
1015 |
|
| 1017 |
snprintf(buf, sizeof(buf), "%s/%s", pkg->CATEGORY, pkg->PF); |
1016 |
snprintf(buf, sizeof(buf), "%s/%s", pkg->CATEGORY, pkg->PF); |
| 1018 |
if ((atom = atom_explode(buf)) == NULL) |
1017 |
if ((atom = atom_explode(buf)) == NULL) |
| 1019 |
errf("%s/%s is not a valid atom", pkg->CATEGORY, pkg->PF); |
1018 |
errf("%s/%s is not a valid atom", pkg->CATEGORY, pkg->PF); |
| 1020 |
|
1019 |
|
| 1021 |
snprintf(str, sizeof(str), "%s/%s", pkgdir, pkg->CATEGORY); |
|
|
| 1022 |
mkdir(str, 0755); |
| 1023 |
|
| 1024 |
for (i = 1; i < argc; i++) { |
1020 |
for (i = 1; i < argc; i++) { |
| 1025 |
if (argv[i][0] == '-') |
1021 |
if (argv[i][0] == '-') |
| 1026 |
continue; |
1022 |
continue; |
|
Lines 1029-1107
Link Here
|
| 1029 |
if (match_pkg(argv[i], pkg) < 1) |
1025 |
if (match_pkg(argv[i], pkg) < 1) |
| 1030 |
continue; |
1026 |
continue; |
| 1031 |
|
1027 |
|
| 1032 |
/* qmerge -pv patch */ |
1028 |
pkg_fetch(0, atom, pkg); |
| 1033 |
if (pretend) { |
1029 |
} |
| 1034 |
int level = 0; |
1030 |
/* free the atom */ |
| 1035 |
if (!install) install++; |
1031 |
atom_implode(atom); |
| 1036 |
/* qprint_tree_node(level, atom, pkg); */ |
1032 |
} |
| 1037 |
pkg_merge(level, atom, pkg); |
|
|
| 1038 |
continue; |
| 1039 |
} |
| 1040 |
|
1033 |
|
| 1041 |
/* check to see if file exists and it's checksum matches */ |
1034 |
void pkg_fetch(int level, depend_atom *atom, struct pkg_t *pkg) |
| 1042 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, pkg->CATEGORY, pkg->PF); |
1035 |
{ |
| 1043 |
unlink_empty(buf); |
1036 |
char savecwd[_POSIX_PATH_MAX]; |
| 1044 |
|
1037 |
char buf[255], str[255]; |
| 1045 |
if ((force_download) && (access(buf, R_OK) == 0) && ((pkg->SHA1[0]) || (pkg->MD5[0]))) { |
1038 |
memset(str, 0, sizeof(str)); |
| 1046 |
if ((pkg_verify_checksums(buf, pkg, atom, 0, 0)) != 0) |
|
|
| 1047 |
unlink(buf); |
| 1048 |
} |
| 1049 |
if (access(buf, R_OK) == 0) { |
| 1050 |
if ((!pkg->SHA1[0]) && (!pkg->MD5[0])) { |
| 1051 |
warn("No checksum data for %s", buf); |
| 1052 |
continue; |
| 1053 |
} else { |
| 1054 |
if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) { |
| 1055 |
pkg_merge(0, atom, pkg); |
| 1056 |
continue; |
| 1057 |
} |
| 1058 |
} |
| 1059 |
} |
| 1060 |
if (verbose) |
| 1061 |
printf("Fetching %s/%s.tbz2\n", atom->CATEGORY, pkg->PF); |
| 1062 |
|
1039 |
|
| 1063 |
/* fetch the package */ |
1040 |
/* qmerge -pv patch */ |
| 1064 |
/* Check CATEGORY first */ |
1041 |
if (pretend) { |
| 1065 |
if (!old_repo) { |
1042 |
if (!install) install++; |
| 1066 |
snprintf(buf, sizeof(buf), "%s/%s.tbz2", atom->CATEGORY, pkg->PF); |
1043 |
/* qprint_tree_node(level, atom, pkg); */ |
| 1067 |
fetch(str, buf); |
1044 |
pkg_merge(level, atom, pkg); |
| 1068 |
} |
1045 |
return; |
| 1069 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
1046 |
} |
| 1070 |
if (access(buf, R_OK) != 0) { |
1047 |
|
| 1071 |
snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF); |
1048 |
/* check to see if file exists and it's checksum matches */ |
| 1072 |
fetch(str, buf); |
1049 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, pkg->CATEGORY, pkg->PF); |
| 1073 |
old_repo = 1; |
1050 |
unlink_empty(buf); |
| 1074 |
} |
1051 |
|
| 1075 |
|
1052 |
snprintf(str, sizeof(str), "%s/%s", pkgdir, pkg->CATEGORY); |
| 1076 |
/* verify the pkg exists now. unlink if zero bytes */ |
1053 |
mkdir(str, 0755); |
| 1077 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
1054 |
|
| 1078 |
unlink_empty(buf); |
1055 |
if ((force_download) && (access(buf, R_OK) == 0) && ((pkg->SHA1[0]) || (pkg->MD5[0]))) { |
| 1079 |
|
1056 |
if ((pkg_verify_checksums(buf, pkg, atom, 0, 0)) != 0) |
| 1080 |
if (access(buf, R_OK) != 0) { |
|
|
| 1081 |
warn("Failed to fetch %s.tbz2 from %s", pkg->PF, binhost); |
| 1082 |
fflush(stderr); |
| 1083 |
continue; |
| 1084 |
} |
| 1085 |
getcwd(savecwd, sizeof(savecwd)); |
| 1086 |
assert(chdir(pkgdir) == 0); |
| 1087 |
if (chdir("All/") == 0) { |
| 1088 |
snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF); |
| 1089 |
snprintf(str, sizeof(str), "../%s/%s.tbz2", atom->CATEGORY, pkg->PF); |
| 1090 |
unlink(buf); |
1057 |
unlink(buf); |
| 1091 |
symlink(str, buf); |
1058 |
} |
|
|
1059 |
if (access(buf, R_OK) == 0) { |
| 1060 |
if ((!pkg->SHA1[0]) && (!pkg->MD5[0])) { |
| 1061 |
warn("No checksum data for %s", buf); |
| 1062 |
return; |
| 1063 |
} else { |
| 1064 |
if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) { |
| 1065 |
pkg_merge(0, atom, pkg); |
| 1066 |
return; |
| 1067 |
} |
| 1092 |
} |
1068 |
} |
| 1093 |
chdir(savecwd); |
1069 |
} |
|
|
1070 |
if (verbose) |
| 1071 |
printf("Fetching %s/%s.tbz2\n", atom->CATEGORY, pkg->PF); |
| 1094 |
|
1072 |
|
| 1095 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
1073 |
/* fetch the package */ |
| 1096 |
if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) { |
1074 |
/* Check CATEGORY first */ |
| 1097 |
pkg_merge(0, atom, pkg); |
1075 |
if (!old_repo) { |
| 1098 |
continue; |
1076 |
snprintf(buf, sizeof(buf), "%s/%s.tbz2", atom->CATEGORY, pkg->PF); |
| 1099 |
} |
1077 |
fetch(str, buf); |
|
|
1078 |
} |
| 1079 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
| 1080 |
if (access(buf, R_OK) != 0) { |
| 1081 |
snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF); |
| 1082 |
fetch(str, buf); |
| 1083 |
old_repo = 1; |
| 1084 |
} |
| 1085 |
|
| 1086 |
/* verify the pkg exists now. unlink if zero bytes */ |
| 1087 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
| 1088 |
unlink_empty(buf); |
| 1089 |
|
| 1090 |
if (access(buf, R_OK) != 0) { |
| 1091 |
warn("Failed to fetch %s.tbz2 from %s", pkg->PF, binhost); |
| 1092 |
fflush(stderr); |
| 1093 |
return; |
| 1094 |
} |
| 1095 |
getcwd(savecwd, sizeof(savecwd)); |
| 1096 |
assert(chdir(pkgdir) == 0); |
| 1097 |
if (chdir("All/") == 0) { |
| 1098 |
snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF); |
| 1099 |
snprintf(str, sizeof(str), "../%s/%s.tbz2", atom->CATEGORY, pkg->PF); |
| 1100 |
unlink(buf); |
| 1101 |
symlink(str, buf); |
| 1102 |
} |
| 1103 |
chdir(savecwd); |
| 1104 |
|
| 1105 |
snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF); |
| 1106 |
if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) { |
| 1107 |
pkg_merge(0, atom, pkg); |
| 1108 |
return; |
| 1100 |
} |
1109 |
} |
| 1101 |
/* free the atom */ |
|
|
| 1102 |
atom_implode(atom); |
| 1103 |
} |
1110 |
} |
| 1104 |
|
1111 |
|
|
|
1112 |
|
| 1113 |
|
| 1114 |
|
| 1105 |
void print_Pkg(int full, struct pkg_t *pkg) |
1115 |
void print_Pkg(int full, struct pkg_t *pkg) |
| 1106 |
{ |
1116 |
{ |
| 1107 |
char *p = NULL; |
1117 |
char *p = NULL; |
|
Lines 1407-1414
Link Here
|
| 1407 |
print_Pkg(verbose, pkg); |
1417 |
print_Pkg(verbose, pkg); |
| 1408 |
} |
1418 |
} |
| 1409 |
} else { |
1419 |
} else { |
| 1410 |
/* this name is misleading */ |
1420 |
pkg_process(argc, argv, pkg); |
| 1411 |
pkg_fetch(argc, argv, pkg); |
|
|
| 1412 |
} |
1421 |
} |
| 1413 |
free(pkg); |
1422 |
free(pkg); |
| 1414 |
} |
1423 |
} |