dbda8d6ce9 2007-07-21 drh: /* dbda8d6ce9 2007-07-21 drh: ** Copyright (c) 2007 D. Richard Hipp dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ** This program is free software; you can redistribute it and/or dbda8d6ce9 2007-07-21 drh: ** modify it under the terms of the GNU General Public dbda8d6ce9 2007-07-21 drh: ** License version 2 as published by the Free Software Foundation. dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ** This program is distributed in the hope that it will be useful, dbda8d6ce9 2007-07-21 drh: ** but WITHOUT ANY WARRANTY; without even the implied warranty of dbda8d6ce9 2007-07-21 drh: ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dbda8d6ce9 2007-07-21 drh: ** General Public License for more details. dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ** You should have received a copy of the GNU General Public dbda8d6ce9 2007-07-21 drh: ** License along with this library; if not, write to the dbda8d6ce9 2007-07-21 drh: ** Free Software Foundation, Inc., 59 Temple Place - Suite 330, dbda8d6ce9 2007-07-21 drh: ** Boston, MA 02111-1307, USA. dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ** Author contact information: dbda8d6ce9 2007-07-21 drh: ** drh@hwaci.com dbda8d6ce9 2007-07-21 drh: ** http://www.hwaci.com/drh/ dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ******************************************************************************* dbda8d6ce9 2007-07-21 drh: ** dbda8d6ce9 2007-07-21 drh: ** This file contains code used to push, pull, and sync a repository dbda8d6ce9 2007-07-21 drh: */ dbda8d6ce9 2007-07-21 drh: #include "config.h" dbda8d6ce9 2007-07-21 drh: #include "sync.h" dbda8d6ce9 2007-07-21 drh: #include <assert.h> dbda8d6ce9 2007-07-21 drh: 49b59bc559 2008-02-09 drh: #if INTERFACE 49b59bc559 2008-02-09 drh: /* 49b59bc559 2008-02-09 drh: ** Flags used to determine which direction(s) an autosync goes in. 49b59bc559 2008-02-09 drh: */ 49b59bc559 2008-02-09 drh: #define AUTOSYNC_PUSH 1 49b59bc559 2008-02-09 drh: #define AUTOSYNC_PULL 2 49b59bc559 2008-02-09 drh: 49b59bc559 2008-02-09 drh: #endif /* INTERFACE */ 49b59bc559 2008-02-09 drh: dbda8d6ce9 2007-07-21 drh: /* fff234b77c 2007-09-25 drh: ** If the respository is configured for autosyncing, then do an fff234b77c 2007-09-25 drh: ** autosync. This will be a pull if the argument is true or a push fff234b77c 2007-09-25 drh: ** if the argument is false. Return true if the autosync is done fff234b77c 2007-09-25 drh: ** and false if autosync is not requested for the current repository. dbda8d6ce9 2007-07-21 drh: */ 49b59bc559 2008-02-09 drh: int autosync(int flags){ fff234b77c 2007-09-25 drh: const char *zUrl; f9f7cf5684 2007-11-24 drh: if( db_get_boolean("autosync", 0)==0 ){ b773dda29b 2007-09-25 jnc: return 0; b773dda29b 2007-09-25 jnc: } fff234b77c 2007-09-25 drh: zUrl = db_get("last-sync-url", 0); 097479f99a 2007-09-26 drh: if( zUrl==0 ){ fff234b77c 2007-09-25 drh: return 0; /* No default server */ dbda8d6ce9 2007-07-21 drh: } fff234b77c 2007-09-25 drh: url_parse(zUrl); dbda8d6ce9 2007-07-21 drh: if( g.urlIsFile ){ fff234b77c 2007-09-25 drh: return 0; /* Network sync only */ fff234b77c 2007-09-25 drh: } fff234b77c 2007-09-25 drh: if( g.urlPort!=80 ){ fff234b77c 2007-09-25 drh: printf("Autosync: http://%s:%d%s\n", g.urlName, g.urlPort, g.urlPath); dbda8d6ce9 2007-07-21 drh: }else{ fff234b77c 2007-09-25 drh: printf("Autosync: http://%s%s\n", g.urlName, g.urlPath); fff234b77c 2007-09-25 drh: } 676fdd088a 2008-05-01 drh: url_enable_proxy("via proxy: "); 49b59bc559 2008-02-09 drh: client_sync((flags & AUTOSYNC_PUSH)!=0, 1, 0); fff234b77c 2007-09-25 drh: return 1; b773dda29b 2007-09-25 jnc: } b773dda29b 2007-09-25 jnc: 8dbee6731d 2007-07-31 drh: /* 8dbee6731d 2007-07-31 drh: ** This routine processes the command-line argument for push, pull, 8dbee6731d 2007-07-31 drh: ** and sync. If a command-line argument is given, that is the URL 8dbee6731d 2007-07-31 drh: ** of a server to sync against. If no argument is given, use the 8dbee6731d 2007-07-31 drh: ** most recently synced URL. Remember the current URL for next time. 8dbee6731d 2007-07-31 drh: */ 8dbee6731d 2007-07-31 drh: static void process_sync_args(void){ 8dbee6731d 2007-07-31 drh: const char *zUrl = 0; 4e683ef07b 2008-05-05 drh: db_find_and_open_repository(1); 8dbee6731d 2007-07-31 drh: if( g.argc==2 ){ 8dbee6731d 2007-07-31 drh: zUrl = db_get("last-sync-url", 0); 8dbee6731d 2007-07-31 drh: }else if( g.argc==3 ){ 8dbee6731d 2007-07-31 drh: zUrl = g.argv[2]; 8dbee6731d 2007-07-31 drh: } 8dbee6731d 2007-07-31 drh: if( zUrl==0 ){ 8dbee6731d 2007-07-31 drh: usage("URL"); 8dbee6731d 2007-07-31 drh: } 8dbee6731d 2007-07-31 drh: url_parse(zUrl); 8dbee6731d 2007-07-31 drh: if( g.urlIsFile ){ 8dbee6731d 2007-07-31 drh: fossil_fatal("network sync only"); 8dbee6731d 2007-07-31 drh: } 134e2aeccc 2007-09-28 drh: db_set("last-sync-url", zUrl, 0); 8dbee6731d 2007-07-31 drh: user_select(); ce825ac954 2007-07-31 drh: if( g.argc==2 ){ ce825ac954 2007-07-31 drh: if( g.urlPort!=80 ){ ce825ac954 2007-07-31 drh: printf("Server: http://%s:%d%s\n", g.urlName, g.urlPort, g.urlPath); ce825ac954 2007-07-31 drh: }else{ ce825ac954 2007-07-31 drh: printf("Server: http://%s%s\n", g.urlName, g.urlPath); ce825ac954 2007-07-31 drh: } dbda8d6ce9 2007-07-21 drh: } 676fdd088a 2008-05-01 drh: url_enable_proxy("via proxy: "); 8dbee6731d 2007-07-31 drh: } 8dbee6731d 2007-07-31 drh: 8dbee6731d 2007-07-31 drh: /* 8dbee6731d 2007-07-31 drh: ** COMMAND: pull 8dbee6731d 2007-07-31 drh: ** 6607844a01 2007-08-18 drh: ** Usage: %fossil pull ?URL? ?-R|--respository REPOSITORY? 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** Pull changes in a remote repository into the local repository. 6607844a01 2007-08-18 drh: ** The repository is identified by the -R or --repository option. 6607844a01 2007-08-18 drh: ** If there is no such option then the open repository is used. 6607844a01 2007-08-18 drh: ** The URL of the remote server is specified on the command line 6607844a01 2007-08-18 drh: ** If no URL is specified then the URL used by the most recent 6607844a01 2007-08-18 drh: ** "pull", "push", or "sync" command is used. 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** The URL is of the following form: 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** http://USER@HOST:PORT/PATH 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** The "USER@" and ":PORT" substrings are optional. 6607844a01 2007-08-18 drh: ** The "USER" substring specifies the login user. You will be 6607844a01 2007-08-18 drh: ** prompted for the password on the command-line. The PORT 6607844a01 2007-08-18 drh: ** specifies the TCP port of the server. The default port is 6607844a01 2007-08-18 drh: ** 80. 8dbee6731d 2007-07-31 drh: */ 8dbee6731d 2007-07-31 drh: void pull_cmd(void){ 8dbee6731d 2007-07-31 drh: process_sync_args(); 8dbee6731d 2007-07-31 drh: client_sync(0,1,0); dbda8d6ce9 2007-07-21 drh: } dbda8d6ce9 2007-07-21 drh: dbda8d6ce9 2007-07-21 drh: /* dbda8d6ce9 2007-07-21 drh: ** COMMAND: push dbda8d6ce9 2007-07-21 drh: ** 6607844a01 2007-08-18 drh: ** Usage: %fossil push ?URL? ?-R|--repository REPOSITORY? 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** Push changes in the local repository over into a remote repository. 6607844a01 2007-08-18 drh: ** See the "pull" command for additional information. dbda8d6ce9 2007-07-21 drh: */ dbda8d6ce9 2007-07-21 drh: void push_cmd(void){ 8dbee6731d 2007-07-31 drh: process_sync_args(); 8dbee6731d 2007-07-31 drh: client_sync(1,0,0); dbda8d6ce9 2007-07-21 drh: } dbda8d6ce9 2007-07-21 drh: dbda8d6ce9 2007-07-21 drh: dbda8d6ce9 2007-07-21 drh: /* dbda8d6ce9 2007-07-21 drh: ** COMMAND: sync dbda8d6ce9 2007-07-21 drh: ** 6607844a01 2007-08-18 drh: ** Usage: %fossil sync ?URL? ?-R|--repository REPOSITORY? 6607844a01 2007-08-18 drh: ** 6607844a01 2007-08-18 drh: ** Synchronize the local repository with a remote repository. This is 6607844a01 2007-08-18 drh: ** the equivalent of running both "push" and "pull" at the same time. 6607844a01 2007-08-18 drh: ** See the "pull" command for additional information. dbda8d6ce9 2007-07-21 drh: */ dbda8d6ce9 2007-07-21 drh: void sync_cmd(void){ 8dbee6731d 2007-07-31 drh: process_sync_args(); 8dbee6731d 2007-07-31 drh: client_sync(1,1,0); dbda8d6ce9 2007-07-21 drh: }