Allow for creating patch series
This allows for specifying a revision range using the id2 parameter of /patch/. The output that is produced is similar to $ git format-patch --stdout id2..id Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
This commit is contained in:
parent
455b598778
commit
750f6462c9
2
cmd.c
2
cmd.c
@ -98,7 +98,7 @@ static void repolist_fn(struct cgit_context *ctx)
|
||||
|
||||
static void patch_fn(struct cgit_context *ctx)
|
||||
{
|
||||
cgit_print_patch(ctx->qry.sha1, ctx->qry.path);
|
||||
cgit_print_patch(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path);
|
||||
}
|
||||
|
||||
static void plain_fn(struct cgit_context *ctx)
|
||||
|
25
ui-patch.c
25
ui-patch.c
@ -11,7 +11,7 @@
|
||||
#include "html.h"
|
||||
#include "ui-shared.h"
|
||||
|
||||
void cgit_print_patch(char *hex, const char *prefix)
|
||||
void cgit_print_patch(char *hex, const char *old_rev, const char *prefix)
|
||||
{
|
||||
struct rev_info rev;
|
||||
struct commit *commit;
|
||||
@ -33,16 +33,29 @@ void cgit_print_patch(char *hex, const char *prefix)
|
||||
return;
|
||||
}
|
||||
|
||||
if (commit->parents && commit->parents->item) {
|
||||
if (old_rev) {
|
||||
if (get_sha1(old_rev, old_sha1)) {
|
||||
cgit_print_error("Bad object id: %s", old_rev);
|
||||
return;
|
||||
}
|
||||
if (!lookup_commit_reference(old_sha1)) {
|
||||
cgit_print_error("Bad commit reference: %s", old_rev);
|
||||
return;
|
||||
}
|
||||
} else if (commit->parents && commit->parents->item) {
|
||||
hashcpy(old_sha1, commit->parents->item->object.sha1);
|
||||
sprintf(rev_range, "%s..%s", sha1_to_hex(old_sha1),
|
||||
sha1_to_hex(sha1));
|
||||
} else {
|
||||
hashclr(old_sha1);
|
||||
memcpy(rev_range, sha1_to_hex(sha1), 41);
|
||||
}
|
||||
|
||||
patchname = fmt("%s.patch", sha1_to_hex(sha1));
|
||||
if (is_null_sha1(old_sha1)) {
|
||||
memcpy(rev_range, sha1_to_hex(sha1), 41);
|
||||
} else {
|
||||
sprintf(rev_range, "%s..%s", sha1_to_hex(old_sha1),
|
||||
sha1_to_hex(sha1));
|
||||
}
|
||||
|
||||
patchname = fmt("%s.patch", rev_range);
|
||||
ctx.page.mimetype = "text/plain";
|
||||
ctx.page.filename = patchname;
|
||||
cgit_print_http_headers(&ctx);
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifndef UI_PATCH_H
|
||||
#define UI_PATCH_H
|
||||
|
||||
extern void cgit_print_patch(char *hex, const char *prefix);
|
||||
extern void cgit_print_patch(char *hex, const char *old_rev, const char *prefix);
|
||||
|
||||
#endif /* UI_PATCH_H */
|
||||
|
Loading…
Reference in New Issue
Block a user