| | @@ -51,18 +51,20 @@ |
| 51 | 51 | */ |
| 52 | 52 | void update_cmd(void){ |
| 53 | 53 | int vid; /* Current version */ |
| 54 | 54 | int tid; /* Target version - version we are changing to */ |
| 55 | 55 | Stmt q; |
| 56 | + int latestFlag; /* Pick the latest version if true */ |
| 56 | 57 | |
| 58 | + latestFlag = find_option("latest",0, 0)!=0; |
| 57 | 59 | if( g.argc!=3 && g.argc!=2 ){ |
| 58 | 60 | usage("?VERSION?"); |
| 59 | 61 | } |
| 60 | 62 | db_must_be_within_tree(); |
| 61 | 63 | vid = db_lget_int("checkout", 0); |
| 62 | 64 | if( vid==0 ){ |
| 63 | | - vid = 1; |
| 65 | + fossil_fatal("cannot find current version"); |
| 64 | 66 | } |
| 65 | 67 | if( db_exists("SELECT 1 FROM vmerge") ){ |
| 66 | 68 | fossil_fatal("cannot update an uncommitted merge"); |
| 67 | 69 | } |
| 68 | 70 | if( g.argc==3 ){ |
| | @@ -73,11 +75,11 @@ |
| 73 | 75 | if( !is_a_version(tid) ){ |
| 74 | 76 | fossil_fatal("not a version: %s", g.argv[2]); |
| 75 | 77 | } |
| 76 | 78 | }else{ |
| 77 | 79 | compute_leaves(vid); |
| 78 | | - if( db_int(0, "SELECT count(*) FROM leaves")>1 ){ |
| 80 | + if( !latestFlag && db_int(0, "SELECT count(*) FROM leaves")>1 ){ |
| 79 | 81 | db_prepare(&q, |
| 80 | 82 | "%s " |
| 81 | 83 | " AND event.objid IN leaves" |
| 82 | 84 | " ORDER BY event.mtime DESC", |
| 83 | 85 | timeline_query_for_tty() |
| | @@ -84,11 +86,13 @@ |
| 84 | 86 | ); |
| 85 | 87 | print_timeline(&q, 100); |
| 86 | 88 | db_finalize(&q); |
| 87 | 89 | fossil_fatal("Multiple descendents"); |
| 88 | 90 | } |
| 89 | | - tid = db_int(0, "SELECT rid FROM leaves"); |
| 91 | + tid = db_int(0, "SELECT rid FROM leaves, event" |
| 92 | + " WHERE event.objid=leaves.rid" |
| 93 | + " ORDER BY event.mtime DESC"); |
| 90 | 94 | } |
| 91 | 95 | |
| 92 | 96 | db_begin_transaction(); |
| 93 | 97 | vfile_check_signature(vid); |
| 94 | 98 | undo_begin(); |
| 95 | 99 | |