Fossil SCM

In file changes histories, show when the file is deleted.

drh 2010-04-02 19:27 trunk
Commit 4bbb437f06ec4066bb79d8a547fb5ed4c9405359
1 file changed +51 -45
+51 -45
--- src/finfo.c
+++ src/finfo.c
@@ -58,19 +58,20 @@
5858
usage("FILENAME");
5959
}
6060
file_tree_name(g.argv[2], &dest, 1);
6161
zFilename = blob_str(&dest);
6262
db_prepare(&q,
63
- "SELECT b.uuid, ci.uuid, date(event.mtime,'localtime'),"
63
+ "SELECT "
64
+ " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* New file */
65
+ " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* The check-in */
66
+ " date(event.mtime,'localtime'),"
6467
" coalesce(event.ecomment, event.comment),"
6568
" coalesce(event.euser, event.user)"
66
- " FROM mlink, blob b, event, blob ci"
69
+ " FROM mlink, event"
6770
" WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
68
- " AND b.rid=mlink.fid"
6971
" AND event.objid=mlink.mid"
70
- " AND event.objid=ci.rid"
71
- " ORDER BY event.mtime DESC LIMIT %d OFFSET %d",
72
+ " ORDER BY event.mtime DESC LIMIT %d OFFSET %d /*sort*/",
7273
zFilename, iLimit, iOffset
7374
);
7475
7576
printf("History of %s\n", zFilename);
7677
while( db_step(&q)==SQLITE_ROW ){
@@ -79,12 +80,17 @@
7980
const char *zDate = db_column_text(&q, 2);
8081
const char *zCom = db_column_text(&q, 3);
8182
const char *zUser = db_column_text(&q, 4);
8283
char *zOut;
8384
printf("%s ", zDate);
84
- zOut = sqlite3_mprintf("[%.10s] %s (user: %s, artifact: [%.10s])",
85
- zCiUuid, zCom, zUser, zFileUuid);
85
+ if( zFileUuid==0 ){
86
+ zOut = sqlite3_mprintf("[%.10s] DELETED %s (user: %s)",
87
+ zCiUuid, zCom, zUser);
88
+ }else{
89
+ zOut = sqlite3_mprintf("[%.10s] %s (user: %s, artifact: [%.10s])",
90
+ zCiUuid, zCom, zUser, zFileUuid);
91
+ }
8692
comment_print(zOut, 11, 79);
8793
sqlite3_free(zOut);
8894
}
8995
db_finalize(&q);
9096
blob_reset(&dest);
@@ -111,28 +117,25 @@
111117
112118
zPrevDate[0] = 0;
113119
zFilename = PD("name","");
114120
db_prepare(&q,
115121
"SELECT"
116
- " substr(b.uuid,1,10),"
117
- " datetime(event.mtime,'localtime'),"
118
- " coalesce(event.ecomment, event.comment),"
119
- " coalesce(event.euser, event.user),"
120
- " mlink.pid,"
121
- " mlink.fid,"
122
- " (SELECT substr(uuid,1,10) FROM blob WHERE rid=mlink.pid),"
123
- " (SELECT substr(uuid,1,10) FROM blob WHERE rid=mlink.fid),"
124
- " ci.uuid,"
125
- " event.bgcolor,"
122
+ " datetime(event.mtime,'localtime')," /* Date of change */
123
+ " coalesce(event.ecomment, event.comment)," /* Check-in comment */
124
+ " coalesce(event.euser, event.user)," /* User who made chng */
125
+ " mlink.pid," /* File rid */
126
+ " mlink.fid," /* Parent file rid */
127
+ " (SELECT uuid FROM blob WHERE rid=mlink.pid)," /* Parent file uuid */
128
+ " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* Current file uuid */
129
+ " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* Check-in uuid */
130
+ " event.bgcolor," /* Background color */
126131
" (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0"
127
- " AND tagxref.rid=mlink.mid)"
128
- " FROM mlink, blob b, event, blob ci"
132
+ " AND tagxref.rid=mlink.mid)" /* Tags */
133
+ " FROM mlink, event"
129134
" WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
130
- " AND b.rid=mlink.fid"
131135
" AND event.objid=mlink.mid"
132
- " AND event.objid=ci.rid"
133
- " ORDER BY event.mtime DESC",
136
+ " ORDER BY event.mtime DESC /*sort*/",
134137
TAG_BRANCH,
135138
zFilename
136139
);
137140
blob_zero(&title);
138141
blob_appendf(&title, "History of ");
@@ -141,21 +144,20 @@
141144
blob_reset(&title);
142145
pGraph = graph_init();
143146
@ <div id="canvas" style="position:relative;width:1px;height:1px;"></div>
144147
@ <table cellspacing=0 border=0 cellpadding=0>
145148
while( db_step(&q)==SQLITE_ROW ){
146
- const char *zUuid = db_column_text(&q, 0);
147
- const char *zDate = db_column_text(&q, 1);
148
- const char *zCom = db_column_text(&q, 2);
149
- const char *zUser = db_column_text(&q, 3);
150
- int fpid = db_column_int(&q, 4);
151
- int frid = db_column_int(&q, 5);
152
- const char *zFpuid = db_column_text(&q, 6);
153
- const char *zFuid = db_column_text(&q, 7);
154
- const char *zCkin = db_column_text(&q,8);
155
- const char *zBgClr = db_column_text(&q, 9);
156
- const char *zBr = db_column_text(&q, 10);
149
+ const char *zDate = db_column_text(&q, 0);
150
+ const char *zCom = db_column_text(&q, 1);
151
+ const char *zUser = db_column_text(&q, 2);
152
+ int fpid = db_column_int(&q, 3);
153
+ int frid = db_column_int(&q, 4);
154
+ const char *zPUuid = db_column_text(&q, 5);
155
+ const char *zUuid = db_column_text(&q, 6);
156
+ const char *zCkin = db_column_text(&q,7);
157
+ const char *zBgClr = db_column_text(&q, 8);
158
+ const char *zBr = db_column_text(&q, 9);
157159
int gidx;
158160
char zTime[10];
159161
char zShort[20];
160162
char zShortCkin[20];
161163
if( zBr==0 ) zBr = "trunk";
@@ -176,28 +178,32 @@
176178
}else{
177179
@ <td valign="top" align="left">
178180
}
179181
sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid);
180182
sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin);
181
- if( g.okHistory ){
182
- @ <a href="%s(g.zTop)/artifact/%s(zUuid)">[%s(zShort)]</a>
183
+ if( zUuid ){
184
+ if( g.okHistory ){
185
+ @ <a href="%s(g.zTop)/artifact/%s(zUuid)">[%S(zUuid)]</a>
186
+ }else{
187
+ @ [%S(zUuid)]
188
+ }
189
+ @ part of check-in
183190
}else{
184
- @ [%s(zShort)]
191
+ @ <b>Deleted</b> by check-in
185192
}
186
- @ part of check-in
187193
hyperlink_to_uuid(zShortCkin);
188194
@ %h(zCom) (user:
189195
hyperlink_to_user(zUser, zDate, "");
190196
@ branch: %h(zBr))
191
- if( g.okHistory ){
192
- if( fpid ){
193
- @ <a href="%s(g.zTop)/fdiff?v1=%s(zFpuid)&amp;v2=%s(zFuid)">[diff]</a>
194
- }
195
- @ <a href="%s(g.zTop)/annotate?checkin=%s(zShortCkin)&amp;filename=%h(zFilename)">
196
- @ [annotate]</a>
197
- @ </td>
198
- }
197
+ if( g.okHistory && zUuid ){
198
+ if( fpid ){
199
+ @ <a href="%s(g.zTop)/fdiff?v1=%s(zPUuid)&amp;v2=%s(zUuid)">[diff]</a>
200
+ }
201
+ @ <a href="%s(g.zTop)/annotate?checkin=%S(zCkin)&amp;filename=%h(zFilename)">
202
+ @ [annotate]</a>
203
+ }
204
+ @ </td>
199205
}
200206
db_finalize(&q);
201207
if( pGraph ){
202208
graph_finish(pGraph, 1);
203209
if( pGraph->nErr ){
204210
--- src/finfo.c
+++ src/finfo.c
@@ -58,19 +58,20 @@
58 usage("FILENAME");
59 }
60 file_tree_name(g.argv[2], &dest, 1);
61 zFilename = blob_str(&dest);
62 db_prepare(&q,
63 "SELECT b.uuid, ci.uuid, date(event.mtime,'localtime'),"
 
 
 
64 " coalesce(event.ecomment, event.comment),"
65 " coalesce(event.euser, event.user)"
66 " FROM mlink, blob b, event, blob ci"
67 " WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
68 " AND b.rid=mlink.fid"
69 " AND event.objid=mlink.mid"
70 " AND event.objid=ci.rid"
71 " ORDER BY event.mtime DESC LIMIT %d OFFSET %d",
72 zFilename, iLimit, iOffset
73 );
74
75 printf("History of %s\n", zFilename);
76 while( db_step(&q)==SQLITE_ROW ){
@@ -79,12 +80,17 @@
79 const char *zDate = db_column_text(&q, 2);
80 const char *zCom = db_column_text(&q, 3);
81 const char *zUser = db_column_text(&q, 4);
82 char *zOut;
83 printf("%s ", zDate);
84 zOut = sqlite3_mprintf("[%.10s] %s (user: %s, artifact: [%.10s])",
85 zCiUuid, zCom, zUser, zFileUuid);
 
 
 
 
 
86 comment_print(zOut, 11, 79);
87 sqlite3_free(zOut);
88 }
89 db_finalize(&q);
90 blob_reset(&dest);
@@ -111,28 +117,25 @@
111
112 zPrevDate[0] = 0;
113 zFilename = PD("name","");
114 db_prepare(&q,
115 "SELECT"
116 " substr(b.uuid,1,10),"
117 " datetime(event.mtime,'localtime'),"
118 " coalesce(event.ecomment, event.comment),"
119 " coalesce(event.euser, event.user),"
120 " mlink.pid,"
121 " mlink.fid,"
122 " (SELECT substr(uuid,1,10) FROM blob WHERE rid=mlink.pid),"
123 " (SELECT substr(uuid,1,10) FROM blob WHERE rid=mlink.fid),"
124 " ci.uuid,"
125 " event.bgcolor,"
126 " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0"
127 " AND tagxref.rid=mlink.mid)"
128 " FROM mlink, blob b, event, blob ci"
129 " WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
130 " AND b.rid=mlink.fid"
131 " AND event.objid=mlink.mid"
132 " AND event.objid=ci.rid"
133 " ORDER BY event.mtime DESC",
134 TAG_BRANCH,
135 zFilename
136 );
137 blob_zero(&title);
138 blob_appendf(&title, "History of ");
@@ -141,21 +144,20 @@
141 blob_reset(&title);
142 pGraph = graph_init();
143 @ <div id="canvas" style="position:relative;width:1px;height:1px;"></div>
144 @ <table cellspacing=0 border=0 cellpadding=0>
145 while( db_step(&q)==SQLITE_ROW ){
146 const char *zUuid = db_column_text(&q, 0);
147 const char *zDate = db_column_text(&q, 1);
148 const char *zCom = db_column_text(&q, 2);
149 const char *zUser = db_column_text(&q, 3);
150 int fpid = db_column_int(&q, 4);
151 int frid = db_column_int(&q, 5);
152 const char *zFpuid = db_column_text(&q, 6);
153 const char *zFuid = db_column_text(&q, 7);
154 const char *zCkin = db_column_text(&q,8);
155 const char *zBgClr = db_column_text(&q, 9);
156 const char *zBr = db_column_text(&q, 10);
157 int gidx;
158 char zTime[10];
159 char zShort[20];
160 char zShortCkin[20];
161 if( zBr==0 ) zBr = "trunk";
@@ -176,28 +178,32 @@
176 }else{
177 @ <td valign="top" align="left">
178 }
179 sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid);
180 sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin);
181 if( g.okHistory ){
182 @ <a href="%s(g.zTop)/artifact/%s(zUuid)">[%s(zShort)]</a>
 
 
 
 
 
183 }else{
184 @ [%s(zShort)]
185 }
186 @ part of check-in
187 hyperlink_to_uuid(zShortCkin);
188 @ %h(zCom) (user:
189 hyperlink_to_user(zUser, zDate, "");
190 @ branch: %h(zBr))
191 if( g.okHistory ){
192 if( fpid ){
193 @ <a href="%s(g.zTop)/fdiff?v1=%s(zFpuid)&amp;v2=%s(zFuid)">[diff]</a>
194 }
195 @ <a href="%s(g.zTop)/annotate?checkin=%s(zShortCkin)&amp;filename=%h(zFilename)">
196 @ [annotate]</a>
197 @ </td>
198 }
199 }
200 db_finalize(&q);
201 if( pGraph ){
202 graph_finish(pGraph, 1);
203 if( pGraph->nErr ){
204
--- src/finfo.c
+++ src/finfo.c
@@ -58,19 +58,20 @@
58 usage("FILENAME");
59 }
60 file_tree_name(g.argv[2], &dest, 1);
61 zFilename = blob_str(&dest);
62 db_prepare(&q,
63 "SELECT "
64 " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* New file */
65 " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* The check-in */
66 " date(event.mtime,'localtime'),"
67 " coalesce(event.ecomment, event.comment),"
68 " coalesce(event.euser, event.user)"
69 " FROM mlink, event"
70 " WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
 
71 " AND event.objid=mlink.mid"
72 " ORDER BY event.mtime DESC LIMIT %d OFFSET %d /*sort*/",
 
73 zFilename, iLimit, iOffset
74 );
75
76 printf("History of %s\n", zFilename);
77 while( db_step(&q)==SQLITE_ROW ){
@@ -79,12 +80,17 @@
80 const char *zDate = db_column_text(&q, 2);
81 const char *zCom = db_column_text(&q, 3);
82 const char *zUser = db_column_text(&q, 4);
83 char *zOut;
84 printf("%s ", zDate);
85 if( zFileUuid==0 ){
86 zOut = sqlite3_mprintf("[%.10s] DELETED %s (user: %s)",
87 zCiUuid, zCom, zUser);
88 }else{
89 zOut = sqlite3_mprintf("[%.10s] %s (user: %s, artifact: [%.10s])",
90 zCiUuid, zCom, zUser, zFileUuid);
91 }
92 comment_print(zOut, 11, 79);
93 sqlite3_free(zOut);
94 }
95 db_finalize(&q);
96 blob_reset(&dest);
@@ -111,28 +117,25 @@
117
118 zPrevDate[0] = 0;
119 zFilename = PD("name","");
120 db_prepare(&q,
121 "SELECT"
122 " datetime(event.mtime,'localtime')," /* Date of change */
123 " coalesce(event.ecomment, event.comment)," /* Check-in comment */
124 " coalesce(event.euser, event.user)," /* User who made chng */
125 " mlink.pid," /* File rid */
126 " mlink.fid," /* Parent file rid */
127 " (SELECT uuid FROM blob WHERE rid=mlink.pid)," /* Parent file uuid */
128 " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* Current file uuid */
129 " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* Check-in uuid */
130 " event.bgcolor," /* Background color */
 
131 " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0"
132 " AND tagxref.rid=mlink.mid)" /* Tags */
133 " FROM mlink, event"
134 " WHERE mlink.fnid=(SELECT fnid FROM filename WHERE name=%Q)"
 
135 " AND event.objid=mlink.mid"
136 " ORDER BY event.mtime DESC /*sort*/",
 
137 TAG_BRANCH,
138 zFilename
139 );
140 blob_zero(&title);
141 blob_appendf(&title, "History of ");
@@ -141,21 +144,20 @@
144 blob_reset(&title);
145 pGraph = graph_init();
146 @ <div id="canvas" style="position:relative;width:1px;height:1px;"></div>
147 @ <table cellspacing=0 border=0 cellpadding=0>
148 while( db_step(&q)==SQLITE_ROW ){
149 const char *zDate = db_column_text(&q, 0);
150 const char *zCom = db_column_text(&q, 1);
151 const char *zUser = db_column_text(&q, 2);
152 int fpid = db_column_int(&q, 3);
153 int frid = db_column_int(&q, 4);
154 const char *zPUuid = db_column_text(&q, 5);
155 const char *zUuid = db_column_text(&q, 6);
156 const char *zCkin = db_column_text(&q,7);
157 const char *zBgClr = db_column_text(&q, 8);
158 const char *zBr = db_column_text(&q, 9);
 
159 int gidx;
160 char zTime[10];
161 char zShort[20];
162 char zShortCkin[20];
163 if( zBr==0 ) zBr = "trunk";
@@ -176,28 +178,32 @@
178 }else{
179 @ <td valign="top" align="left">
180 }
181 sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid);
182 sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin);
183 if( zUuid ){
184 if( g.okHistory ){
185 @ <a href="%s(g.zTop)/artifact/%s(zUuid)">[%S(zUuid)]</a>
186 }else{
187 @ [%S(zUuid)]
188 }
189 @ part of check-in
190 }else{
191 @ <b>Deleted</b> by check-in
192 }
 
193 hyperlink_to_uuid(zShortCkin);
194 @ %h(zCom) (user:
195 hyperlink_to_user(zUser, zDate, "");
196 @ branch: %h(zBr))
197 if( g.okHistory && zUuid ){
198 if( fpid ){
199 @ <a href="%s(g.zTop)/fdiff?v1=%s(zPUuid)&amp;v2=%s(zUuid)">[diff]</a>
200 }
201 @ <a href="%s(g.zTop)/annotate?checkin=%S(zCkin)&amp;filename=%h(zFilename)">
202 @ [annotate]</a>
203 }
204 @ </td>
205 }
206 db_finalize(&q);
207 if( pGraph ){
208 graph_finish(pGraph, 1);
209 if( pGraph->nErr ){
210

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button