Index: src/info.c ================================================================== --- src/info.c +++ src/info.c @@ -360,11 +360,11 @@ if( fossil_strcmp(zOld, zNew)!=0 ){ @

Modified %z(href("%R/finfo?name=%T",zName))%h(zName) @ from %z(href("%R/artifact/%s",zOld))[%S(zOld)] @ to %z(href("%R/artifact/%s",zNew))[%S(zNew)]. }else if( zOldName!=0 && fossil_strcmp(zName,zOldName)!=0 ){ - @

Name change from + @

Name change @ from %z(href("%R/finfo?name=%T",zOldName))%h(zOldName) @ to %z(href("%R/finfo?name=%T",zName))%h(zName). }else{ @

Execute permission %s(( mperm==PERM_EXE )?"set":"cleared") for @ %z(href("%R/finfo?name=%T",zName))%h(zName) @@ -700,12 +700,14 @@ " (SELECT uuid FROM blob WHERE rid=mlink.pid)," " (SELECT uuid FROM blob WHERE rid=mlink.fid)," " (SELECT name FROM filename WHERE filename.fnid=mlink.pfnid)" " FROM mlink JOIN filename ON filename.fnid=mlink.fnid" " WHERE mlink.mid=%d" + " AND (mlink.fid>0" + " OR mlink.fnid NOT IN (SELECT pfnid FROM mlink WHERE mid=%d))" " ORDER BY name /*sort*/", - rid + rid, rid ); diffFlags = construct_diff_flags(showDiff, sideBySide); while( db_step(&q)==SQLITE_ROW ){ const char *zName = db_column_text(&q,0); int mperm = db_column_int(&q, 1); Index: src/manifest.c ================================================================== --- src/manifest.c +++ src/manifest.c @@ -1983,5 +1983,23 @@ manifest_destroy(p); } assert( blob_is_reset(pContent) ); return 1; } + +/* +** COMMAND: test-crosslink +** +** Usage: %fossil test-crosslink RECORDID +** +** Run the manifest_crosslink() routine on the artifact with the given +** record ID. This is typically done in the debugger. +*/ +void test_crosslink_cmd(void){ + int rid; + Blob content; + db_find_and_open_repository(0, 0); + if( g.argc!=3 ) usage("RECORDID"); + rid = name_to_rid(g.argv[2]); + content_get(rid, &content); + manifest_crosslink(rid, &content); +} Index: src/timeline.c ================================================================== --- src/timeline.c +++ src/timeline.c @@ -426,10 +426,12 @@ " (SELECT uuid FROM blob WHERE rid=fid)," " (SELECT uuid FROM blob WHERE rid=pid)," " (SELECT name FROM filename WHERE fnid=mlink.pfnid) AS oldnm" " FROM mlink" " WHERE mid=:mid AND (pid!=fid OR pfnid>0)" + " AND (fid>0 OR" + " fnid NOT IN (SELECT pfnid FROM mlink WHERE mid=:mid))" " ORDER BY 3 /*sort*/" ); fchngQueryInit = 1; } db_bind_int(&fchngQuery, ":mid", rid);