|
|
|
|
@ -68,7 +68,7 @@ repo_struct *yon_repo_struct_new(){
|
|
|
|
|
storage->path=NULL;
|
|
|
|
|
storage->storage_path=NULL;
|
|
|
|
|
storage->archs = g_hash_table_new(g_str_hash,g_str_equal);
|
|
|
|
|
storage->sign_status=0;
|
|
|
|
|
storage->sign_status=NULL;
|
|
|
|
|
return storage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -120,7 +120,7 @@ void yon_package_hash_table_clone(GHashTable *source_hash, GHashTable *target_ha
|
|
|
|
|
arch_struct *yon_arch_copy_full(arch_struct *repo){
|
|
|
|
|
arch_struct *copy = yon_arch_struct_new();
|
|
|
|
|
copy->name=yon_char_new(repo->name);
|
|
|
|
|
copy->path=yon_char_new(repo->name);
|
|
|
|
|
copy->path=yon_char_new(repo->path);
|
|
|
|
|
copy->storage_path=yon_char_new(repo->storage_path);
|
|
|
|
|
copy->repo_name=yon_char_new(repo->repo_name);
|
|
|
|
|
yon_package_hash_table_clone(repo->packages,copy->packages);
|
|
|
|
|
@ -140,7 +140,7 @@ void yon_arch_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash)
|
|
|
|
|
repo_struct *yon_repo_copy_full(repo_struct *repo){
|
|
|
|
|
repo_struct *copy = yon_repo_struct_new();
|
|
|
|
|
copy->name=yon_char_new(repo->name);
|
|
|
|
|
copy->path=yon_char_new(repo->name);
|
|
|
|
|
copy->path=yon_char_new(repo->path);
|
|
|
|
|
copy->storage_path=yon_char_new(repo->storage_path);
|
|
|
|
|
copy->sign_status=repo->sign_status;
|
|
|
|
|
yon_arch_hash_table_clone(repo->archs,copy->archs);
|
|
|
|
|
@ -160,7 +160,7 @@ void yon_repo_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash)
|
|
|
|
|
storage_struct *yon_storage_copy_full(storage_struct *storage){
|
|
|
|
|
storage_struct *copy = yon_storage_struct_new();
|
|
|
|
|
copy->name=yon_char_new(storage->name);
|
|
|
|
|
copy->path=yon_char_new(storage->name);
|
|
|
|
|
copy->path=yon_char_new(storage->path);
|
|
|
|
|
copy->sign_status=storage->sign_status;
|
|
|
|
|
yon_repo_hash_table_clone(storage->repos,copy->repos);
|
|
|
|
|
return copy;
|
|
|
|
|
@ -175,3 +175,170 @@ void yon_storage_hash_table_clone(GHashTable *source_hash, GHashTable *target_ha
|
|
|
|
|
g_hash_table_insert(target_hash,storage_copy->path,storage_copy);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_storage_edit_accept(storage_struct *target_struct, storage_struct *source_struct){
|
|
|
|
|
char *changes = config(STORAGE(target_struct->path));
|
|
|
|
|
if (!yon_char_is_empty(changes)){
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(changes,&size,";");
|
|
|
|
|
if (size>0&&!yon_char_is_empty(parsed[0])){
|
|
|
|
|
int removed_size;
|
|
|
|
|
config_str removed = yon_char_parse(parsed[0],&removed_size,",");
|
|
|
|
|
for (int i=0;i<removed_size;i++){
|
|
|
|
|
repo_struct *repo = g_hash_table_lookup(target_struct->repos,removed[i]);
|
|
|
|
|
g_hash_table_remove(target_struct->repos,removed[i]);
|
|
|
|
|
yon_repo_sturct_free_full(repo);
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(removed,removed_size);
|
|
|
|
|
}
|
|
|
|
|
if (size>1&&!yon_char_is_empty(parsed[1])){
|
|
|
|
|
int added_size;
|
|
|
|
|
config_str added = yon_char_parse(parsed[1],&added_size,",");
|
|
|
|
|
for (int i=0;i<added_size;i++){
|
|
|
|
|
repo_struct *repo = g_hash_table_lookup(source_struct->repos,added[i]);
|
|
|
|
|
if (repo){
|
|
|
|
|
repo_struct *copy = yon_repo_copy_full(repo);
|
|
|
|
|
g_hash_table_insert(target_struct->repos,copy->path,copy);
|
|
|
|
|
}
|
|
|
|
|
char *command = create_storage_command(repo->storage_path,repo->name);
|
|
|
|
|
yon_launch(yon_debug_output("%s\n",command));
|
|
|
|
|
free(command);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
yon_char_parsed_free(added,added_size);
|
|
|
|
|
}
|
|
|
|
|
if (size>2&&!yon_char_is_empty(parsed[2])){
|
|
|
|
|
int sign_size;
|
|
|
|
|
config_str sign = yon_char_parse(parsed[2],&sign_size, ",");
|
|
|
|
|
for (int i=0;i<sign_size;i++){
|
|
|
|
|
char *sign_key = yon_char_new(sign[i]);
|
|
|
|
|
char *key = yon_char_divide_search(sign_key,":",-1);
|
|
|
|
|
repo_struct *repo = g_hash_table_lookup(target_struct->repos,key);
|
|
|
|
|
char *command = repo_sign_command(repo->storage_path,repo->name,sign_key);
|
|
|
|
|
yon_launch(yon_debug_output("%s\n",command));
|
|
|
|
|
free(command);
|
|
|
|
|
free(sign_key);
|
|
|
|
|
free(key);
|
|
|
|
|
}
|
|
|
|
|
yon_char_parsed_free(sign,sign_size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
GList *list = g_hash_table_get_values(source_struct->repos);
|
|
|
|
|
GList *iter;
|
|
|
|
|
char *parameter=NULL;
|
|
|
|
|
yon_window_config_get_parameter("storage_info",source_struct->path,¶meter,YON_TYPE_STRING);
|
|
|
|
|
for (iter=list;iter;iter=iter->next){
|
|
|
|
|
repo_struct *repo = (repo_struct*)iter->data;
|
|
|
|
|
char *temp = yon_char_append_element(parameter,repo->path,",");
|
|
|
|
|
if (!yon_char_is_empty(parameter)) free(parameter);
|
|
|
|
|
parameter = temp;
|
|
|
|
|
}
|
|
|
|
|
g_list_free(list);
|
|
|
|
|
yon_window_config_add_instant_parameter(source_struct->path,"storage_info",parameter,YON_TYPE_STRING);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_storage_struct_add_repo(storage_struct *storage,repo_struct *repo){
|
|
|
|
|
char *str = config(STORAGE(storage->path));
|
|
|
|
|
if (!yon_char_is_empty(str)){
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(str,&size,";");
|
|
|
|
|
|
|
|
|
|
if (size>1&&!yon_char_is_empty(parsed[1])){
|
|
|
|
|
int added_size;
|
|
|
|
|
config_str added = yon_char_parse(parsed[1],&added_size,",");
|
|
|
|
|
if (yon_char_parsed_check_exist(added,added_size,repo->name)==-1){
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(added,&added_size,repo->name);
|
|
|
|
|
} else {
|
|
|
|
|
yon_char_parsed_free(added,added_size);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(parsed[1])) free(parsed[1]);
|
|
|
|
|
parsed[1] = yon_char_parsed_to_string(parsed,size,",");
|
|
|
|
|
} else if (size>0){
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name);
|
|
|
|
|
} else {
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
char *final = yon_char_parsed_to_string_full(parsed,size,";");
|
|
|
|
|
yon_config_register(STORAGE(storage->path),STORAGE_command,final);
|
|
|
|
|
free(final);
|
|
|
|
|
if (parsed&&size) yon_char_parsed_free(parsed,size);
|
|
|
|
|
} else {
|
|
|
|
|
char *final = yon_char_unite(";",repo->name,";",NULL);
|
|
|
|
|
yon_config_register(STORAGE(storage->path),STORAGE_command,final);
|
|
|
|
|
free(final);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_storage_struct_remove(storage_struct *storage,repo_struct *repo){
|
|
|
|
|
|
|
|
|
|
char *str = config(STORAGE(storage->path));
|
|
|
|
|
if (!yon_char_is_empty(str)){
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(str,&size,";");
|
|
|
|
|
|
|
|
|
|
if (size>0&&!yon_char_is_empty(parsed[0])){
|
|
|
|
|
int removed_size;
|
|
|
|
|
config_str removed = yon_char_parse(parsed[0],&removed_size,",");
|
|
|
|
|
if (yon_char_parsed_check_exist(removed,removed_size,repo->name)==-1){
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(removed,&removed_size,repo->name);
|
|
|
|
|
} else {
|
|
|
|
|
yon_char_parsed_free(removed,removed_size);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!yon_char_is_empty(parsed[1])) free(parsed[1]);
|
|
|
|
|
parsed[1] = yon_char_parsed_to_string_full(parsed,size,",");
|
|
|
|
|
} else {
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
}
|
|
|
|
|
char *final = yon_char_parsed_to_string_full(parsed,size,";");
|
|
|
|
|
yon_config_register(STORAGE(storage->path),STORAGE_command,final);
|
|
|
|
|
free(final);
|
|
|
|
|
if (parsed&&size) yon_char_parsed_free(parsed,size);
|
|
|
|
|
} else {
|
|
|
|
|
char *final = yon_char_unite(repo->name,";;",NULL);
|
|
|
|
|
yon_config_register(STORAGE(storage->path),STORAGE_command,final);
|
|
|
|
|
free(final);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_repo_struct_sign(storage_struct *storage, repo_struct *repo,const char *sign){
|
|
|
|
|
char *str = config(STORAGE(storage->path));
|
|
|
|
|
int size;
|
|
|
|
|
config_str parsed = yon_char_parse(str,&size,";");
|
|
|
|
|
if (size>2&&!yon_char_is_empty(parsed[2])){
|
|
|
|
|
int signs_size;
|
|
|
|
|
config_str signs = yon_char_parse(parsed[2],&signs_size,",");
|
|
|
|
|
char *final = yon_char_unite(repo->name,":",sign,NULL);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(signs,&signs_size,final);
|
|
|
|
|
free(final);
|
|
|
|
|
yon_char_parsed_free(signs,signs_size);
|
|
|
|
|
} else if (size>1){
|
|
|
|
|
char *final = yon_char_unite(repo->name,":",sign,NULL);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,final);
|
|
|
|
|
free(final);
|
|
|
|
|
} else if (size>0){
|
|
|
|
|
char *final = yon_char_unite(repo->name,":",sign,NULL);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,final);
|
|
|
|
|
free(final);
|
|
|
|
|
} else if (!size){
|
|
|
|
|
char *final = yon_char_unite(repo->name,":",sign,NULL);
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,"");
|
|
|
|
|
yon_char_parsed_add_or_create_if_exists(parsed,&size,final);
|
|
|
|
|
free(final);
|
|
|
|
|
}
|
|
|
|
|
char *final = yon_char_parsed_to_string_full(parsed,size,";");
|
|
|
|
|
yon_config_register(STORAGE(storage->path),STORAGE_command,final);
|
|
|
|
|
free(final);
|
|
|
|
|
if (parsed&&size) yon_char_parsed_free(parsed,size);
|
|
|
|
|
}
|