Overview
SHA1 Hash: | f0474b87b0128227dfd60be6f4f8ddeb5be03ba9 |
---|---|
Date: | 2008-07-19 18:18:47 |
User: | drh |
Comment: | Add the ability to edit check-in comments and users from the web interface. |
Timelines: | ancestors | descendants | both | trunk |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
Changes
[hide diffs]Modified src/info.c from [737ba1d6c6] to [e15b50505a].
@@ -303,11 +303,11 @@ login_check_credentials(); if( !g.okRead ){ login_needed(); return; } rid = name_to_rid(PD("name","0")); if( rid==0 ){ - style_header("Version Information Error"); + style_header("Baseline Information Error"); @ No such object: %h(g.argv[2]) style_footer(); return; } isLeaf = !db_exists("SELECT 1 FROM plink WHERE pid=%d", rid); @@ -319,23 +319,43 @@ rid, rid ); if( db_step(&q)==SQLITE_ROW ){ const char *zUuid = db_column_text(&q, 0); char *zTitle = mprintf("Baseline [%.10s]", zUuid); + char *zEUser, *zEComment; + const char *zUser; + const char *zComment; style_header(zTitle); login_anonymous_available(); free(zTitle); - /*@ <h2>Version %s(zUuid)</h2>*/ + zEUser = db_text(0, + "SELECT value FROM tagxref WHERE tagid=%d AND rid=%d", + TAG_USER, rid); + zEComment = db_text(0, + "SELECT value FROM tagxref WHERE tagid=%d AND rid=%d", + TAG_COMMENT, rid); + zUser = db_column_text(&q, 2); + zComment = db_column_text(&q, 3); @ <div class="section">Overview</div> @ <p><table class="label-value"> - @ <tr><th>Version:</th><td>%s(zUuid)</td></tr> + @ <tr><th>SHA1 Hash:</th><td>%s(zUuid)</td></tr> @ <tr><th>Date:</th><td>%s(db_column_text(&q, 1))</td></tr> if( g.okSetup ){ @ <tr><th>Record ID:</th><td>%d(rid)</td></tr> } - @ <tr><th>Original User:</th><td>%h(db_column_text(&q, 2))</td></tr> - @ <tr><th>Original Comment:</th><td>%w(db_column_text(&q,3))</td></tr> + if( zEUser ){ + @ <tr><th>Edited User:</td><td>%h(zEUser)</td></tr> + @ <tr><th>Original User:</th><td>%h(zUser)</td></tr> + }else{ + @ <tr><th>User:</td><td>%h(zUser)</td></tr> + } + if( zEComment ){ + @ <tr><th>Edited Comment:</th><td>%w(zEComment)</td></tr> + @ <tr><th>Original Comment:</th><td>%w(zComment)</td></tr> + }else{ + @ <tr><th>Comment:</th><td>%w(zComment)</td></tr> + } @ </td></tr> if( g.okHistory ){ @ <tr><th>Timelines:</th><td> @ <a href="%s(g.zBaseURL)/timeline?p=%d(rid)">ancestors</a> @ | <a href="%s(g.zBaseURL)/timeline?d=%d(rid)">descendants</a> @@ -344,10 +364,13 @@ @ <tr><th>Commands:</th> @ <td> @ <a href="%s(g.zBaseURL)/vdiff/%d(rid)">diff</a> @ | <a href="%s(g.zBaseURL)/zip/%s(zUuid).zip">ZIP archive</a> @ | <a href="%s(g.zBaseURL)/artifact/%d(rid)">manifest</a> + if( g.okWrite ){ + @ | <a href="%s(g.zBaseURL)/vedit?r=%d(rid)">edit</a> + } @ </td> @ </tr> } @ </table></p> }else{ @@ -354,11 +377,11 @@ style_header("Baseline Information"); login_anonymous_available(); } db_finalize(&q); showTags(rid, ""); - @ <div class="section">Changes</div> + @ <div class="section">Files Changed</div> @ <ul> db_prepare(&q, "SELECT name, pid, fid" " FROM mlink, filename" " WHERE mid=%d" @@ -924,6 +947,93 @@ tinfo_page(); }else { artifact_page(); } +} + +/* +** WEBPAGE: vedit +** URL: vedit?r=RID&c=NEWCOMMENT&u=NEWUSER +** +** Present a dialog for updating properties of a baseline: +** +** * The check-in user +** * The check-in comment +** * The background color. +*/ +void vedit_page(void){ + int rid; + const char *zComment; + const char *zNewComment; + const char *zUser; + const char *zNewUser; + char *zUuid; + Blob comment; + + login_check_credentials(); + if( !g.okWrite ){ login_needed(); return; } + rid = atoi(PD("r","0")); + zComment = db_text(0, "SELECT coalesce(ecomment,comment)" + " FROM event WHERE objid=%d", rid); + if( zComment==0 ) fossil_redirect_home(); + zNewComment = PD("c",zComment); + zUser = db_text(0, "SELECT coalesce(euser,user)" + " FROM event WHERE objid=%d", rid); + if( zUser==0 ) fossil_redirect_home(); + zNewUser = PD("u",zUser); + zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); + if( P("cancel") ){ + cgi_redirectf("vinfo?name=%d", rid); + } + if( P("apply") ){ + Blob ctrl; + char *zDate; + int nChng = 0; + + blob_zero(&ctrl); + zDate = db_text(0, "SELECT datetime('now')"); + zDate[10] = 'T'; + blob_appendf(&ctrl, "D %s\n", zDate); + if( strcmp(zComment,zNewComment)!=0 ){ + nChng++; + blob_appendf(&ctrl, "T +comment %s %F\n", zUuid, zNewComment); + } + if( strcmp(zUser,zNewUser)!=0 ){ + nChng++; + blob_appendf(&ctrl, "T +user %s %F\n", zUuid, zNewUser); + } + if( nChng>0 ){ + int nrid; + Blob cksum; + blob_appendf(&ctrl, "U %F\n", g.zLogin); + md5sum_blob(&ctrl, &cksum); + blob_appendf(&ctrl, "Z %b\n", &cksum); + db_begin_transaction(); + nrid = content_put(&ctrl, 0, 0); + manifest_crosslink(nrid, &ctrl); + db_end_transaction(0); + } + cgi_redirectf("vinfo?name=%d", rid); + } + blob_init(&comment, zNewComment, -1); + zUuid[10] = 0; + style_header("Edit Baseline [%s]", zUuid); + @ <p>Make changes to the User and Comment for baseline + @ [<a href="vinfo?name=%d(rid)">%s(zUuid)</a>] then press the + @ "Apply Changes" button.</p> + @ <form action="%s(g.zBaseURL)/vedit" method="POST"> + @ <input type="hidden" name="r" value="%d(rid)"> + @ <p> + @ <b>User:</b> <input type="text" name="u" size="20" value="%h(zNewUser)"> + @ </p> + @ <p><b>Comment:</b></b><br /> + wiki_convert(&comment, 0, WIKI_INLINE); + @ <br /><textarea name="c" rows="10" cols="80">%h(zNewComment)</textarea></p> + @ <blockquote> + @ <input type="submit" name="preview" value="Preview"> + @ <input type="submit" name="apply" value="Apply Changes"> + @ <input type="submit" name="cancel" value="Cancel"> + @ </blockquote> + @ </form> + style_footer(); }