xref: /openbsd-src/usr.bin/cvs/cvs.h (revision 2f43a3f5488752f16be4ec77bf146703768436fa)
1*2f43a3f5Sderaadt /*	$OpenBSD: cvs.h,v 1.185 2021/01/27 07:18:17 deraadt Exp $	*/
208f90673Sjfb /*
308f90673Sjfb  * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
408f90673Sjfb  * All rights reserved.
508f90673Sjfb  *
608f90673Sjfb  * Redistribution and use in source and binary forms, with or without
708f90673Sjfb  * modification, are permitted provided that the following conditions
808f90673Sjfb  * are met:
908f90673Sjfb  *
1008f90673Sjfb  * 1. Redistributions of source code must retain the above copyright
1108f90673Sjfb  *    notice, this list of conditions and the following disclaimer.
1208f90673Sjfb  * 2. The name of the author may not be used to endorse or promote products
1308f90673Sjfb  *    derived from this software without specific prior written permission.
1408f90673Sjfb  *
1508f90673Sjfb  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
1608f90673Sjfb  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
1708f90673Sjfb  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
1808f90673Sjfb  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
1908f90673Sjfb  * EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2008f90673Sjfb  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
2108f90673Sjfb  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2208f90673Sjfb  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2308f90673Sjfb  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
2408f90673Sjfb  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2508f90673Sjfb  */
2608f90673Sjfb 
2708f90673Sjfb #ifndef CVS_H
2808f90673Sjfb #define CVS_H
2908f90673Sjfb 
301f8531bdSotto #include <signal.h>
311f8531bdSotto 
321f8531bdSotto #include "config.h"
331f8531bdSotto #include "file.h"
341f8531bdSotto #include "log.h"
351f8531bdSotto #include "worklist.h"
361f8531bdSotto #include "repository.h"
37b034d592Sjoris #include "trigger.h"
383ad3fb45Sjoris #include "util.h"
390dbb72f1Sniallo #include "xmalloc.h"
4008f90673Sjfb 
412fb8a869Sjoris #define CVS_VERSION	"OpenCVS 4.5"
4208f90673Sjfb 
430a7da307Sxsa #define CVS_REV_BUFSZ	32
440a7da307Sxsa #define CVS_TIME_BUFSZ	64
450a7da307Sxsa 
4625d9b074Sxsa #define CVS_DATE_FMT	"%Y.%m.%d.%H.%M.%S"
4725d9b074Sxsa 
4808f90673Sjfb /* operations */
4982b8a584Sjfb #define CVS_OP_UNKNOWN		0
5008f90673Sjfb #define CVS_OP_ADD		1
51a202d28bSjfb #define CVS_OP_ADMIN		2
52a202d28bSjfb #define CVS_OP_ANNOTATE		3
53a202d28bSjfb #define CVS_OP_CHECKOUT		4
54a202d28bSjfb #define CVS_OP_COMMIT		5
55a202d28bSjfb #define CVS_OP_DIFF		6
56a202d28bSjfb #define CVS_OP_EDIT		7
57a202d28bSjfb #define CVS_OP_EDITORS		8
58a202d28bSjfb #define CVS_OP_EXPORT		9
59a202d28bSjfb #define CVS_OP_HISTORY		10
60a202d28bSjfb #define CVS_OP_IMPORT		11
61a202d28bSjfb #define CVS_OP_INIT		12
62a202d28bSjfb #define CVS_OP_LOG		13
63a202d28bSjfb #define CVS_OP_RANNOTATE	14
64a202d28bSjfb #define CVS_OP_RDIFF		15
65a202d28bSjfb #define CVS_OP_RELEASE		16
66a202d28bSjfb #define CVS_OP_REMOVE		17
67a202d28bSjfb #define CVS_OP_RLOG		18
68a202d28bSjfb #define CVS_OP_RTAG		19
69a202d28bSjfb #define CVS_OP_SERVER		20
70a202d28bSjfb #define CVS_OP_STATUS		21
71a202d28bSjfb #define CVS_OP_TAG		22
72a202d28bSjfb #define CVS_OP_UNEDIT		23
73a202d28bSjfb #define CVS_OP_UPDATE		24
74a202d28bSjfb #define CVS_OP_VERSION		25
75a202d28bSjfb #define CVS_OP_WATCH		26
76a202d28bSjfb #define CVS_OP_WATCHERS		27
7708f90673Sjfb 
7808f90673Sjfb /* methods */
7908f90673Sjfb #define CVS_METHOD_NONE		0
8008f90673Sjfb #define CVS_METHOD_LOCAL	1	/* local access */
8108f90673Sjfb #define CVS_METHOD_SERVER	2	/* tunnel through CVS_RSH */
8208f90673Sjfb #define CVS_METHOD_PSERVER	3	/* cvs pserver */
8308f90673Sjfb #define CVS_METHOD_KSERVER	4	/* kerberos */
8408f90673Sjfb #define CVS_METHOD_GSERVER	5	/* gssapi server */
8508f90673Sjfb #define CVS_METHOD_EXT		6
8608f90673Sjfb #define CVS_METHOD_FORK		7	/* local but fork */
8708f90673Sjfb 
8808f90673Sjfb #define CVS_CMD_MAXNAMELEN	16
8908f90673Sjfb #define CVS_CMD_MAXALIAS	2
9008f90673Sjfb #define CVS_CMD_MAXDESCRLEN	64
9108f90673Sjfb 
92f331ff59Stobias /* flags */
93fb3beb6cSjoris #define CVS_USE_WDIR		0x01
94fb3beb6cSjoris #define CVS_LOCK_REPO		0x02
95f331ff59Stobias 
9608f90673Sjfb /* defaults */
973b1aca6bSjfb #define CVS_SERVER_DEFAULT	"cvs"
9808f90673Sjfb #define CVS_RSH_DEFAULT		"ssh"
9908f90673Sjfb #define CVS_EDITOR_DEFAULT	"vi"
100e5cbdd76Sxsa #define CVS_TMPDIR_DEFAULT	"/tmp"
10118911d1eSjoris #define CVS_UMASK_DEFAULT	002
10208f90673Sjfb 
103665e4805Sxsa /* extensions */
104665e4805Sxsa #define CVS_DESCR_FILE_EXT	",t"
10508f90673Sjfb 
10608f90673Sjfb /* server-side paths */
10767caf486Sjoris #define CVS_PATH_DEVNULL	"/dev/null"
10808f90673Sjfb #define CVS_PATH_ROOT		"CVSROOT"
1098c53ed4fSxsa #define CVS_PATH_EMPTYDIR	CVS_PATH_ROOT "/Emptydir"
110db68708cSxsa #define CVS_PATH_CHECKOUTLIST	CVS_PATH_ROOT "/checkoutlist"
11108f90673Sjfb #define CVS_PATH_COMMITINFO	CVS_PATH_ROOT "/commitinfo"
11208f90673Sjfb #define CVS_PATH_CONFIG		CVS_PATH_ROOT "/config"
11308f90673Sjfb #define CVS_PATH_CVSIGNORE	CVS_PATH_ROOT "/cvsignore"
11408f90673Sjfb #define CVS_PATH_CVSWRAPPERS	CVS_PATH_ROOT "/cvswrappers"
11508f90673Sjfb #define CVS_PATH_EDITINFO	CVS_PATH_ROOT "/editinfo"
11608f90673Sjfb #define CVS_PATH_HISTORY	CVS_PATH_ROOT "/history"
11708f90673Sjfb #define CVS_PATH_LOGINFO	CVS_PATH_ROOT "/loginfo"
11808f90673Sjfb #define CVS_PATH_MODULES	CVS_PATH_ROOT "/modules"
11984618539Sxsa #define CVS_PATH_NOTIFY_R	CVS_PATH_ROOT "/notify"
12008f90673Sjfb #define CVS_PATH_RCSINFO	CVS_PATH_ROOT "/rcsinfo"
12108f90673Sjfb #define CVS_PATH_TAGINFO	CVS_PATH_ROOT "/taginfo"
122db68708cSxsa #define CVS_PATH_VALTAGS	CVS_PATH_ROOT "/val-tags"
12308f90673Sjfb #define CVS_PATH_VERIFYMSG	CVS_PATH_ROOT "/verifymsg"
12408f90673Sjfb 
12508f90673Sjfb /* client-side paths */
12608f90673Sjfb #define CVS_PATH_RC		".cvsrc"
12708f90673Sjfb #define CVS_PATH_CVSDIR		"CVS"
1285deb5582Sxsa #define CVS_PATH_BASEDIR	CVS_PATH_CVSDIR "/Base"
1295deb5582Sxsa #define CVS_PATH_BASEREV	CVS_PATH_CVSDIR "/Baserev"
1305deb5582Sxsa #define CVS_PATH_BASEREVTMP	CVS_PATH_CVSDIR "/Baserev.tmp"
1315deb5582Sxsa #define CVS_PATH_CHECKINPROG	CVS_PATH_CVSDIR "/Checkin.prog"
13208f90673Sjfb #define CVS_PATH_ENTRIES	CVS_PATH_CVSDIR "/Entries"
13308f90673Sjfb #define CVS_PATH_STATICENTRIES	CVS_PATH_CVSDIR "/Entries.Static"
13408f90673Sjfb #define CVS_PATH_LOGENTRIES	CVS_PATH_CVSDIR "/Entries.Log"
135a3864909Sjoris #define CVS_PATH_BACKUPENTRIES	CVS_PATH_CVSDIR "/Entries.Backup"
1365deb5582Sxsa #define CVS_PATH_NOTIFY		CVS_PATH_CVSDIR "/Notify"
1375deb5582Sxsa #define CVS_PATH_NOTIFYTMP	CVS_PATH_CVSDIR "/Notify.tmp"
13808f90673Sjfb #define CVS_PATH_ROOTSPEC	CVS_PATH_CVSDIR "/Root"
1392e6997a3Sjfb #define CVS_PATH_REPOSITORY	CVS_PATH_CVSDIR "/Repository"
140f5b85944Sxsa #define CVS_PATH_TAG		CVS_PATH_CVSDIR "/Tag"
1415deb5582Sxsa #define CVS_PATH_TEMPLATE	CVS_PATH_CVSDIR "/Template"
1425deb5582Sxsa #define CVS_PATH_UPDATEPROG	CVS_PATH_CVSDIR "/Update.prog"
1438066e34cSjoris #define CVS_PATH_ATTIC		"Attic"
14408f90673Sjfb 
1453901dfa5Sjoris /* history stuff */
1463901dfa5Sjoris #define CVS_HISTORY_TAG			0
1473901dfa5Sjoris #define CVS_HISTORY_CHECKOUT		1
1483901dfa5Sjoris #define CVS_HISTORY_EXPORT		2
1493901dfa5Sjoris #define CVS_HISTORY_RELEASE		3
1503901dfa5Sjoris #define CVS_HISTORY_UPDATE_REMOVE	4
1513901dfa5Sjoris #define CVS_HISTORY_UPDATE_CO		5
1523901dfa5Sjoris #define CVS_HISTORY_UPDATE_MERGED	6
1533901dfa5Sjoris #define CVS_HISTORY_UPDATE_MERGED_ERR	7
1543901dfa5Sjoris #define CVS_HISTORY_COMMIT_MODIFIED	8
1553901dfa5Sjoris #define CVS_HISTORY_COMMIT_ADDED	9
1563901dfa5Sjoris #define CVS_HISTORY_COMMIT_REMOVED	10
1573901dfa5Sjoris 
1583901dfa5Sjoris void	cvs_history_add(int, struct cvs_file *, const char *);
1593901dfa5Sjoris 
160d868b2d9Sjoris struct cvs_cmd {
161ec6ed1abSjoris 	u_int	 cmd_op;
162f331ff59Stobias 	u_int	 cmd_flags;
163d868b2d9Sjoris 	char	 cmd_name[CVS_CMD_MAXNAMELEN];
164d868b2d9Sjoris 	char	 cmd_alias[CVS_CMD_MAXALIAS][CVS_CMD_MAXNAMELEN];
165e4276007Sjfb 	char	 cmd_descr[CVS_CMD_MAXDESCRLEN];
166d868b2d9Sjoris 	char	*cmd_synopsis;
167d868b2d9Sjoris 	char	*cmd_opts;
168d868b2d9Sjoris 	char	*cmd_defargs;
169e4276007Sjfb 
1703ad3fb45Sjoris 	int	(*cmd)(int, char **);
171d868b2d9Sjoris };
17208f90673Sjfb 
1733ad3fb45Sjoris struct cvsroot;
1743ad3fb45Sjoris 
1753ad3fb45Sjoris struct cvs_recursion {
1763ad3fb45Sjoris 	void	(*enterdir)(struct cvs_file *);
1773ad3fb45Sjoris 	void	(*leavedir)(struct cvs_file *);
178bc5d89feSjoris 	void	(*fileproc)(struct cvs_file *);
1791890abdaSjoris 	int	flags;
1803ad3fb45Sjoris };
1810c1ec078Sjfb 
1821890abdaSjoris #define CR_RECURSE_DIRS		0x01
1831890abdaSjoris #define CR_ATTIC		0x02
1841890abdaSjoris #define CR_REPO			0x04
1851890abdaSjoris 
1862d540844Sjfb struct cvs_var {
1872d540844Sjfb 	char   *cv_name;
1882d540844Sjfb 	char   *cv_val;
1892d540844Sjfb 	TAILQ_ENTRY(cvs_var) cv_link;
1902d540844Sjfb };
1912d540844Sjfb 
192*2f43a3f5Sderaadt extern TAILQ_HEAD(cvs_varhead, cvs_var) cvs_variables;
193b4a9add8Sxsa 
1942ecd5aabSjfb #define CVS_ROOT_CONNECTED	0x01
1952ecd5aabSjfb 
19608f90673Sjfb struct cvsroot {
1970d5dc07bSjfb 	char   *cr_str;
19808f90673Sjfb 	u_int   cr_method;
19908f90673Sjfb 	char   *cr_buf;
20008f90673Sjfb 	char   *cr_user;
20108f90673Sjfb 	char   *cr_pass;
20208f90673Sjfb 	char   *cr_host;
20308f90673Sjfb 	char   *cr_dir;
20447c33804Sjoris 	u_int   cr_port;
2050d5dc07bSjfb 
2060d5dc07bSjfb 	/* connection data */
2070d5dc07bSjfb 	FILE   *cr_srvin;
2080d5dc07bSjfb 	FILE   *cr_srvout;
2093b1aca6bSjfb 	FILE   *cr_srverr;
21008f90673Sjfb };
21108f90673Sjfb 
21208f90673Sjfb #define CVS_HIST_ADDED		'A'
21308f90673Sjfb #define CVS_HIST_EXPORT		'E'
21408f90673Sjfb #define CVS_HIST_RELEASE	'F'
21508f90673Sjfb #define CVS_HIST_MODIFIED	'M'
21608f90673Sjfb #define CVS_HIST_CHECKOUT	'O'
21708f90673Sjfb #define CVS_HIST_COMMIT		'R'
21808f90673Sjfb #define CVS_HIST_TAG		'T'
21908f90673Sjfb 
220cefff877Sjfb #define CVS_DATE_DUMMY	"dummy timestamp"
221cefff877Sjfb #define CVS_DATE_DMSEC	(time_t)-1
22270b74753Sjfb 
22308f90673Sjfb #define CVS_ENT_NONE	0
22408f90673Sjfb #define CVS_ENT_FILE	1
22508f90673Sjfb #define CVS_ENT_DIR	2
22608f90673Sjfb 
2279a795badSjfb #define CVS_ENT_REG		0
2289a795badSjfb #define CVS_ENT_ADDED		1
2299a795badSjfb #define CVS_ENT_REMOVED		2
230a8778568Sjoris #define CVS_ENT_UPTODATE	3
231bf2db54cSjoris #define CVS_ENT_UNKNOWN		4
23270b74753Sjfb 
2335190dc2fSxsa #define CVS_ENT_MAXLINELEN	1024
2345190dc2fSxsa 
2353ad3fb45Sjoris #define ENT_NOSYNC	0
2363ad3fb45Sjoris #define ENT_SYNC	1
23708bd75e9Sjfb 
238869a71f2Sjoris #define STRIP_SLASH(p)					\
239869a71f2Sjoris 	do {						\
240869a71f2Sjoris 		size_t _slen;				\
241869a71f2Sjoris 		_slen = strlen(p);			\
242869a71f2Sjoris 		while ((_slen > 0) && (p[_slen - 1] == '/'))	\
243869a71f2Sjoris 			p[--_slen] = '\0';		\
244869a71f2Sjoris 	} while (0)
2453ad3fb45Sjoris 
24608f90673Sjfb struct cvs_ent {
24708f90673Sjfb 	char		*ce_buf;
2489159bf17Sjoris 	char		*ce_conflict;
24908f90673Sjfb 	char		*ce_name;
25008f90673Sjfb 	char		*ce_opts;
25108f90673Sjfb 	char		*ce_tag;
252694b1da3Sstsp 	char		*ce_time;
253d0a588b9Sjoris 	time_t		 ce_date;
2543ad3fb45Sjoris 	time_t		 ce_mtime;
2553ad3fb45Sjoris 	u_int16_t	 ce_type;
2563ad3fb45Sjoris 	u_int16_t	 ce_status;
2573ad3fb45Sjoris 	RCSNUM		*ce_rev;
2583ad3fb45Sjoris };
259ff117408Sjoris 
2603ad3fb45Sjoris struct cvs_ent_line {
2613ad3fb45Sjoris 	char	*buf;
2623ad3fb45Sjoris 	TAILQ_ENTRY(cvs_ent_line) entries_list;
26308f90673Sjfb };
26408f90673Sjfb 
26508f90673Sjfb typedef struct cvs_entries {
26608f90673Sjfb 	char	*cef_path;
267a3864909Sjoris 	char	*cef_bpath;
2683ad3fb45Sjoris 	char	*cef_lpath;
26908f90673Sjfb 
2703ad3fb45Sjoris 	TAILQ_HEAD(, cvs_ent_line)	 cef_ent;
27108f90673Sjfb } CVSENTRIES;
27208f90673Sjfb 
27302d9e5c9Sjoris extern char *checkout_target_dir;
27425d391d7Sjoris extern char *cvs_join_rev1;
27525d391d7Sjoris extern char *cvs_join_rev2;
276daa36f23Snicm extern int   backup_local_changes;
27702d9e5c9Sjoris 
278bf6291b7Sjoris extern struct module_checkout *current_module;
279bf6291b7Sjoris extern char *module_repo_root;
280bf6291b7Sjoris 
2817fca5395Sjoris extern struct ignore_head checkout_ign_pats;
2827a9e6d11Sray extern struct wklhead temp_files;
2833ad3fb45Sjoris extern volatile sig_atomic_t sig_received;
2843ad3fb45Sjoris extern volatile sig_atomic_t cvs_quit;
2853ad3fb45Sjoris extern struct cvsroot *current_cvsroot;
28618911d1eSjoris extern char *cvs_tagname;
2877364655aSjfb extern char *cvs_editor;
28858cbd44dSxsa extern char *cvs_homedir;
28980365430Sjfb extern char *cvs_rsh;
290e5cbdd76Sxsa extern char *cvs_tmpdir;
2918066e34cSjoris extern char *import_repository;
2929fac60a5Sjoris extern char *cvs_server_path;
293113cb29fStobias extern time_t cvs_specified_date;
294b87788a5Stobias extern time_t cvs_directory_date;
2955dd120b0Sjoris extern char *cvs_specified_tag;
29651ef6581Sjoris extern char *cvs_directory_tag;
297d2aab16aSjfb 
29818911d1eSjoris extern int  cvs_umask;
29980365430Sjfb extern int  verbosity;
30080365430Sjfb extern int  cvs_trace;
30180365430Sjfb extern int  cvs_nolog;
30280365430Sjfb extern int  cvs_compress;
303d2aab16aSjfb extern int  cvs_cmdop;
304c68e1832Sjfb extern int  cvs_nocase;
3050bda20e2Sxsa extern int  cvs_noexec;
30680365430Sjfb extern int  cvs_readonly;
3073dcb84b2Sxsa extern int  cvs_readonlyfs;
3089fac60a5Sjoris extern int  cvs_server_active;
309a10a48e5Stobias extern int  reset_option;
310a10a48e5Stobias extern int  reset_tag;
31137fdff3fStobias extern int  kflag;
31293231021Sjfb 
3139d091990Stobias extern struct cvs_cmd *cmdp;
314e4276007Sjfb extern struct cvs_cmd *cvs_cdt[];
3156e3488e6Sjfb 
316e4276007Sjfb extern struct cvs_cmd cvs_cmd_add;
317e4276007Sjfb extern struct cvs_cmd cvs_cmd_admin;
318e4276007Sjfb extern struct cvs_cmd cvs_cmd_annotate;
319e4276007Sjfb extern struct cvs_cmd cvs_cmd_checkout;
320e4276007Sjfb extern struct cvs_cmd cvs_cmd_commit;
321e4276007Sjfb extern struct cvs_cmd cvs_cmd_diff;
322e4276007Sjfb extern struct cvs_cmd cvs_cmd_edit;
323e4276007Sjfb extern struct cvs_cmd cvs_cmd_editors;
324e4276007Sjfb extern struct cvs_cmd cvs_cmd_export;
325e4276007Sjfb extern struct cvs_cmd cvs_cmd_history;
326e4276007Sjfb extern struct cvs_cmd cvs_cmd_import;
327e4276007Sjfb extern struct cvs_cmd cvs_cmd_init;
328e4276007Sjfb extern struct cvs_cmd cvs_cmd_log;
329e9658789Stobias extern struct cvs_cmd cvs_cmd_rannotate;
330e4276007Sjfb extern struct cvs_cmd cvs_cmd_rdiff;
331e4276007Sjfb extern struct cvs_cmd cvs_cmd_release;
332e4276007Sjfb extern struct cvs_cmd cvs_cmd_remove;
333e4276007Sjfb extern struct cvs_cmd cvs_cmd_rlog;
334e4276007Sjfb extern struct cvs_cmd cvs_cmd_rtag;
335e4276007Sjfb extern struct cvs_cmd cvs_cmd_status;
336e4276007Sjfb extern struct cvs_cmd cvs_cmd_tag;
337e4276007Sjfb extern struct cvs_cmd cvs_cmd_update;
338e4276007Sjfb extern struct cvs_cmd cvs_cmd_version;
339e4276007Sjfb extern struct cvs_cmd cvs_cmd_server;
340e4276007Sjfb extern struct cvs_cmd cvs_cmd_unedit;
341e4276007Sjfb extern struct cvs_cmd cvs_cmd_watch;
342e4276007Sjfb extern struct cvs_cmd cvs_cmd_watchers;
343e4276007Sjfb 
34445b98c07Stobias /* add.c */
34545b98c07Stobias void		 cvs_add_tobranch(struct cvs_file *, char *);
34645b98c07Stobias 
3473ad3fb45Sjoris /* cmd.c */
3486b25dbbaSjfb struct cvs_cmd	*cvs_findcmd(const char *);
34908f90673Sjfb 
3503ad3fb45Sjoris /* cvs.c */
35110283864Stobias int		 cvs_build_cmd(char ***, char **, int);
3522d540844Sjfb int		 cvs_var_set(const char *, const char *);
3532d540844Sjfb int		 cvs_var_unset(const char *);
3542d540844Sjfb const char	*cvs_var_get(const char *);
3553ad3fb45Sjoris void		 cvs_cleanup(void);
35608f90673Sjfb 
3578c53ed4fSxsa /* date.y */
3587bb3ddb0Sray time_t		 date_parse(const char *);
359cefff877Sjfb 
3603ad3fb45Sjoris /* entries.c */
3613ad3fb45Sjoris struct cvs_ent	*cvs_ent_parse(const char *);
3623ad3fb45Sjoris struct cvs_ent	*cvs_ent_get(CVSENTRIES *, const char *);
3633ad3fb45Sjoris CVSENTRIES	*cvs_ent_open(const char *);
3643ad3fb45Sjoris void		cvs_ent_add(CVSENTRIES *, const char *);
3653ad3fb45Sjoris void		cvs_ent_remove(CVSENTRIES *, const char *);
3663ad3fb45Sjoris void		cvs_ent_close(CVSENTRIES *, int);
3673ad3fb45Sjoris void		cvs_ent_free(struct cvs_ent *);
368ae83823aSxsa void		cvs_ent_line_str(const char *, char *, char *, char *, char *,
369ae83823aSxsa 		    int, int, char *, size_t);
370890ecb5aSxsa void		cvs_parse_tagfile(char *, char **, char **, int *);
3712dec954eStobias void		cvs_write_tagfile(const char *, char *, char *);
3723ad3fb45Sjoris 
3733ad3fb45Sjoris /* root.c */
3743ad3fb45Sjoris struct cvsroot	*cvsroot_get(const char *);
3754dcde513Sjoris int		cvsroot_is_local(void);
3764dcde513Sjoris int		cvsroot_is_remote(void);
3773ad3fb45Sjoris 
378db758d52Sjoris /* logmsg.c */
379b034d592Sjoris char	*cvs_logmsg_read(const char *);
38084920933Stobias char	*cvs_logmsg_create(char *, struct cvs_flisthead *,
38184920933Stobias 	     struct cvs_flisthead *, struct cvs_flisthead *);
382b034d592Sjoris int	 cvs_logmsg_verify(char *);
383db758d52Sjoris 
3843ad3fb45Sjoris /* misc stuff */
3853ad3fb45Sjoris void	cvs_update_local(struct cvs_file *);
3863ad3fb45Sjoris void	cvs_update_enterdir(struct cvs_file *);
3879f820608Sjoris void	cvs_update_leavedir(struct cvs_file *);
3885d320860Sjoris void	cvs_checkout_file(struct cvs_file *, RCSNUM *, char *, int);
38925d391d7Sjoris void	cvs_remove_local(struct cvs_file *);
39025d391d7Sjoris void	cvs_add_local(struct cvs_file *);
391f9872b43Sjoris int	update_has_conflict_markers(struct cvs_file *);
392daa36f23Snicm void	cvs_backup_file(struct cvs_file *);
393fcdcc3e6Sjoris void	cvs_import_ignored(const char *);
394f9872b43Sjoris 
395f9872b43Sjoris #define CO_MERGE	0x01
3966fba94e7Sjoris #define CO_SETSTICKY	0x02
397b17342c4Sreyk #define CO_DUMP		0x04
3987fffa3ccSjoris #define CO_COMMIT	0x08
39952979273Sjoris #define CO_REMOVE	0x10
40008f90673Sjfb 
4019fac60a5Sjoris /* commands */
40277a3e292Sxsa int	cvs_add(int, char **);
4039e88bdb3Sxsa int	cvs_admin(int, char **);
4047d8fc710Sxsa int	cvs_annotate(int, char **);
4055219eee5Sjoris int	cvs_checkout(int, char **);
406e5c24eacSxsa int	cvs_commit(int, char **);
4079fac60a5Sjoris int	cvs_diff(int, char **);
40880afc5c5Sxsa int	cvs_edit(int, char **);
40980afc5c5Sxsa int	cvs_editors(int, char **);
410e5c24eacSxsa int	cvs_export(int, char **);
411f8d46fa9Sxsa int	cvs_getlog(int, char **);
4123901dfa5Sjoris int	cvs_history(int, char **);
4130b1d6edcSxsa int	cvs_import(int, char **);
414fd590a3cSxsa int	cvs_init(int, char **);
415eb6eca7cSxsa int	cvs_release(int, char **);
41677a3e292Sxsa int	cvs_remove(int, char **);
4179fac60a5Sjoris int	cvs_status(int, char **);
418f8d46fa9Sxsa int	cvs_tag(int, char **);
41980afc5c5Sxsa int	cvs_unedit(int, char **);
4209fac60a5Sjoris int	cvs_update(int, char **);
42153f4be27Sxsa int	cvs_version(int, char **);
42280afc5c5Sxsa int	cvs_watch(int, char **);
42380afc5c5Sxsa int	cvs_watchers(int, char **);
4249fac60a5Sjoris 
4251f8531bdSotto 
4260450b43bSjoris #endif
427