mirror of
https://git.zx2c4.com/cgit
synced 2024-11-22 00:18:41 +00:00
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)
|
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)
|
static void plain_fn(struct cgit_context *ctx)
|
||||||
|
25
ui-patch.c
25
ui-patch.c
@ -11,7 +11,7 @@
|
|||||||
#include "html.h"
|
#include "html.h"
|
||||||
#include "ui-shared.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 rev_info rev;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
@ -33,16 +33,29 @@ void cgit_print_patch(char *hex, const char *prefix)
|
|||||||
return;
|
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);
|
hashcpy(old_sha1, commit->parents->item->object.sha1);
|
||||||
sprintf(rev_range, "%s..%s", sha1_to_hex(old_sha1),
|
|
||||||
sha1_to_hex(sha1));
|
|
||||||
} else {
|
} else {
|
||||||
hashclr(old_sha1);
|
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.mimetype = "text/plain";
|
||||||
ctx.page.filename = patchname;
|
ctx.page.filename = patchname;
|
||||||
cgit_print_http_headers(&ctx);
|
cgit_print_http_headers(&ctx);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#ifndef UI_PATCH_H
|
#ifndef UI_PATCH_H
|
||||||
#define 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 */
|
#endif /* UI_PATCH_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user