Changeset 4808


Ignore:
Timestamp:
11/20/08 10:04:46 (8 years ago)
Author:
tick
Message:

opkg: adding cache support

opkg-cl --cache <cache_directory>

Thank for Werner

Location:
trunk/src/target/opkg/libopkg
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/target/opkg/libopkg/args.c

    r4559 r4808  
    4343     ARGS_OPT_VERBOSITY, 
    4444     ARGS_OPT_MULTIPLE_PROVIDERS, 
    45      ARGS_OPT_AUTOREMOVE 
     45     ARGS_OPT_AUTOREMOVE, 
     46     ARGS_OPT_CACHE, 
    4647}; 
    4748 
     
    9394     free (args->dest); 
    9495     free (args->tmp_dir); 
     96     free (args->cache); 
    9597     free(args->conf_file); 
    9698     args->conf_file = NULL; 
     
    105107          {"query-all", 0, 0, 'A'}, 
    106108          {"autoremove", 0, 0, ARGS_OPT_AUTOREMOVE}, 
     109          {"cache", 1, 0, ARGS_OPT_CACHE}, 
    107110          {"conf-file", 1, 0, 'f'}, 
    108111          {"conf", 1, 0, 'f'}, 
     
    180183          case ARGS_OPT_AUTOREMOVE: 
    181184               args->autoremove = 1; 
     185               break; 
     186          case ARGS_OPT_CACHE: 
     187               free(args->cache); 
     188               args->cache = strdup(optarg); 
    182189               break; 
    183190          case ARGS_OPT_FORCE_DEFAULTS: 
     
    278285     printf("\t                         3 debug output\n"); 
    279286     printf("\t-f <conf_file>           Use <conf_file> as the opkg configuration file\n"); 
     287     printf("\t--cache <directory>      Use a package cache\n"); 
    280288     printf("\t-conf <conf_file>        Default configuration file location\n"); 
    281289     printf("                           is %s/%s\n", ARGS_DEFAULT_CONF_FILE_DIR, ARGS_DEFAULT_CONF_FILE_NAME); 
  • trunk/src/target/opkg/libopkg/args.h

    r4440 r4808  
    4343    char *offline_root_pre_script_cmd; 
    4444    char *offline_root_post_script_cmd; 
     45    char *cache; 
    4546}; 
    4647typedef struct args args_t; 
  • trunk/src/target/opkg/libopkg/opkg.c

    r4671 r4808  
    272272    if (a->offline_root_post_script_cmd) free (a->offline_root_post_script_cmd); 
    273273    a->offline_root_post_script_cmd = strdup (c->offline_root_post_script_cmd); 
     274  } 
     275 
     276  if (c->cache) { 
     277    if (a->cache) 
     278        free (a->cache); 
     279    a->cache = strdup(c->cache); 
    274280  } 
    275281 
  • trunk/src/target/opkg/libopkg/opkg_conf.c

    r4475 r4808  
    5050{ 
    5151     opkg_option_t tmp[] = { 
     52          { "cache", OPKG_OPT_TYPE_STRING, &conf->cache}, 
    5253          { "force_defaults", OPKG_OPT_TYPE_BOOL, &conf->force_defaults }, 
    5354          { "force_depends", OPKG_OPT_TYPE_BOOL, &conf->force_depends }, 
     
    271272                               args->offline_root_post_script_cmd); 
    272273 
     274     opkg_conf_override_string(&conf->cache, args->cache); 
     275 
    273276/* Pigi: added a flag to disable the checking of structures if the command does not need to  
    274277         read anything from there. 
     
    338341     opkg_conf_free_string(&conf->offline_root_pre_script_cmd); 
    339342     opkg_conf_free_string(&conf->offline_root_post_script_cmd); 
     343 
     344     opkg_conf_free_string(&conf->cache); 
    340345 
    341346     if (conf->verbosity > 1) {  
  • trunk/src/target/opkg/libopkg/opkg_conf.h

    r4473 r4808  
    7171     int verbosity; 
    7272     int noaction; 
     73     char *cache; 
    7374 
    7475     /* proxy options */ 
  • trunk/src/target/opkg/libopkg/opkg_download.c

    r4640 r4808  
    3434#include "opkg_defines.h" 
    3535 
    36 int opkg_download(opkg_conf_t *conf, const char *src, const char *dest_file_name, curl_progress_func cb, void *data) 
     36static int do_download(opkg_conf_t *conf, const char *src, 
     37  const char *dest_file_name, curl_progress_func cb, void *data) 
    3738{ 
    3839    int err = 0; 
     
    136137} 
    137138 
     139int opkg_download(opkg_conf_t *conf, const char *src, 
     140  const char *dest_file_name, curl_progress_func cb, void *data) 
     141{ 
     142    char *cache_name = strdup(src); 
     143    char *cache_location, *p; 
     144    int err = 0; 
     145 
     146    if (!conf->cache || str_starts_with(src, "file:")) { 
     147        err = do_download(conf, src, dest_file_name, cb, data); 
     148        goto out1; 
     149    } 
     150 
     151    for (p = cache_name; *p; p++) 
     152        if (*p == '/') 
     153            *p = ',';   /* looks nicer than | or # */ 
     154 
     155    sprintf_alloc(&cache_location, "%s/%s", conf->cache, cache_name); 
     156    if (file_exists(cache_location)) 
     157        opkg_message(conf, OPKG_NOTICE, "Copying %s\n", cache_location); 
     158    else { 
     159        err = do_download(conf, src, cache_location, cb, data); 
     160        if (err) { 
     161            (void) unlink(cache_location); 
     162            goto out2; 
     163        } 
     164    } 
     165 
     166    err = file_copy(cache_location, dest_file_name); 
     167 
     168 
     169out2: 
     170    free(cache_location); 
     171out1: 
     172    free(cache_name); 
     173    return err; 
     174} 
     175 
    138176int opkg_download_pkg(opkg_conf_t *conf, pkg_t *pkg, const char *dir) 
    139177{ 
Note: See TracChangeset for help on using the changeset viewer.