apr_array_header_t * svn_cstring_split(const char *input, const char *sep_chars, svn_boolean_t chop_whitespace, apr_pool_t *pool) { apr_array_header_t *a = apr_array_make(pool, 5, sizeof(input)); svn_cstring_split_append(a, input, sep_chars, chop_whitespace, pool); return a; }
apr_array_header_t *svn_support_blame_call(char *file_path, int revision, apr_pool_t *subpool) { svn_error_t *err; svn_opt_revision_t peg_rev,start,end; svn_diff_file_options_t *diff_options; // -- Initialisation des révisions -- if (revision != -1) { peg_rev.kind = end.kind = svn_opt_revision_number; peg_rev.value.number = end.value.number = revision; } else { peg_rev.kind = svn_opt_revision_unspecified; end.kind = svn_opt_revision_head; } start.kind = svn_opt_revision_number; start.value.number = 1; // -- Initialisation des diff_options -- diff_options = svn_diff_file_options_create(pool); // -- Initialisation du tableau et du buffer de résultats -- apr_array_header_t *list_result = apr_array_make(pool, 1, sizeof (const char *)); svn_stringbuf_t *res = svn_stringbuf_create("",pool); err = svn_client_blame4(file_path, &peg_rev, &start, &end, diff_options, FALSE, // ignore_mime_type FALSE, // include_merged_revisions blame_callback, res, ctx, pool); if (err) { svn_handle_error2(err, stderr, FALSE, "svn_support_blame: "); svn_pool_destroy(subpool); return NULL; } svn_cstring_split_append(list_result,res->data,"\n",FALSE,pool); svn_pool_destroy(subpool); return list_result; }
apr_array_header_t *svn_support_list_call(char *rep_path, int rev,apr_pool_t *subpool) { svn_error_t *err; svn_opt_revision_t revision; // -- Initialisation de la revision -- if (rev != -1) { revision.kind = svn_opt_revision_number; revision.value.number = rev; } else{ revision.kind = svn_opt_revision_unspecified; } // -- Initialisation du tableau et du buffer de résultats -- apr_array_header_t *list_result = apr_array_make(subpool, 1, sizeof (const char *)); svn_stringbuf_t *res = svn_stringbuf_create("",subpool); // -- Appel de svn list -- err = svn_client_list2(rep_path, &revision, &revision, svn_depth_immediates, SVN_DIRENT_ALL, FALSE, list_callback, res, ctx, subpool); if (err) { svn_handle_error2(err, stderr, FALSE, "svn_support_list: "); svn_pool_destroy(subpool); return NULL; } svn_cstring_split_append(list_result,res->data,"\n",TRUE,subpool); svn_pool_destroy(subpool); return list_result; }
/* fonction simulant la commande svn log */ apr_array_header_t *svn_support_log_call(char *rep_path, int start, int end, int limit, apr_pool_t *subpool) { svn_error_t *err; svn_opt_revision_t revision_start; svn_opt_revision_t revision_end; // -- Initialisation de la cible -- apr_array_header_t *targets = apr_array_make (subpool, 1, sizeof (char *)); *(char **)apr_array_push(targets) = rep_path; // -- Initialisation de l'intervalle de revisions -- if (end == -1) { if (start == -1) { revision_start.kind = svn_opt_revision_head; revision_end.kind = svn_opt_revision_number; revision_end.value.number = 1; } else { revision_start.kind = svn_opt_revision_number; revision_start.value.number = start; revision_end.kind = svn_opt_revision_head; } } else { if (start == -1) { revision_start.kind = svn_opt_revision_number; revision_start.value.number = end; revision_end.kind = svn_opt_revision_number; revision_end.value.number = 1; } else { revision_start.kind = svn_opt_revision_number; revision_start.value.number = start; revision_end.kind = svn_opt_revision_number; revision_end.value.number = end; } } // -- Choix des propriétés a récupérer -- apr_array_header_t *revprops = apr_array_make (subpool, 3, sizeof (char *)); *(char **)apr_array_push(revprops) = SVN_PROP_REVISION_AUTHOR; *(char **)apr_array_push(revprops) = SVN_PROP_REVISION_DATE; *(char **)apr_array_push(revprops) = SVN_PROP_REVISION_LOG; // -- Initialisation du tableau et du buffer de résultats -- apr_array_header_t *list_result = apr_array_make(subpool, 1, sizeof (const char *)); svn_stringbuf_t *res = svn_stringbuf_create("",subpool); err = svn_client_log4(targets, &revision_start, &revision_start, &revision_end, limit, FALSE, TRUE, FALSE, revprops, log_callback, res, ctx, subpool); if (err) { svn_handle_error2(err, stderr, FALSE, "svn_support_log: "); svn_pool_destroy(subpool); return NULL; } svn_cstring_split_append(list_result,res->data,"\n",FALSE,subpool); svn_pool_destroy(subpool); return list_result; }