Annotation of src/usr.bin/cvs/file.h, Revision 1.1
1.1 ! jfb 1: /* $OpenBSD$ */
! 2: /*
! 3: * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
! 4: * All rights reserved.
! 5: *
! 6: * Redistribution and use in source and binary forms, with or without
! 7: * modification, are permitted provided that the following conditions
! 8: * are met:
! 9: *
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. The name of the author may not be used to endorse or promote products
! 13: * derived from this software without specific prior written permission.
! 14: *
! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
! 16: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
! 17: * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
! 18: * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
! 19: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
! 20: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
! 21: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
! 22: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
! 23: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
! 24: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 25: */
! 26:
! 27: #ifndef FILE_H
! 28: #define FILE_H
! 29:
! 30: #include <sys/param.h>
! 31: #include <stdio.h>
! 32: #include <dirent.h>
! 33:
! 34: #include "rcs.h"
! 35:
! 36: #define CVS_VERSION "OpenCVS 0.1"
! 37:
! 38:
! 39: #define FILE_HIST_CACHE 128
! 40: #define FILE_HIST_NBFLD 6
! 41:
! 42:
! 43: #define CVS_CKSUM_LEN 33 /* length of a CVS checksum string */
! 44:
! 45:
! 46: /* operations */
! 47: #define CVS_OP_ANY 0 /* all operations */
! 48: #define CVS_OP_ADD 1
! 49: #define CVS_OP_ANNOTATE 2
! 50: #define CVS_OP_CHECKOUT 3
! 51: #define CVS_OP_COMMIT 4
! 52: #define CVS_OP_DIFF 5
! 53: #define CVS_OP_HISTORY 6
! 54: #define CVS_OP_IMPORT 7
! 55: #define CVS_OP_INIT 8
! 56: #define CVS_OP_LOG 9
! 57: #define CVS_OP_REMOVE 10
! 58: #define CVS_OP_SERVER 11
! 59: #define CVS_OP_STATUS 12
! 60: #define CVS_OP_TAG 13
! 61: #define CVS_OP_UPDATE 14
! 62: #define CVS_OP_VERSION 15
! 63:
! 64:
! 65:
! 66:
! 67: /* methods */
! 68: #define CVS_METHOD_NONE 0
! 69: #define CVS_METHOD_LOCAL 1 /* local access */
! 70: #define CVS_METHOD_SERVER 2 /* tunnel through CVS_RSH */
! 71: #define CVS_METHOD_PSERVER 3 /* cvs pserver */
! 72: #define CVS_METHOD_KSERVER 4 /* kerberos */
! 73: #define CVS_METHOD_GSERVER 5 /* gssapi server */
! 74: #define CVS_METHOD_EXT 6
! 75: #define CVS_METHOD_FORK 7 /* local but fork */
! 76:
! 77: #define CVS_CMD_MAXNAMELEN 16
! 78: #define CVS_CMD_MAXALIAS 2
! 79: #define CVS_CMD_MAXDESCRLEN 64
! 80:
! 81:
! 82: /* defaults */
! 83: #define CVS_RSH_DEFAULT "ssh"
! 84: #define CVS_EDITOR_DEFAULT "vi"
! 85:
! 86:
! 87: /* server-side paths */
! 88: #define CVS_PATH_ROOT "CVSROOT"
! 89: #define CVS_PATH_COMMITINFO CVS_PATH_ROOT "/commitinfo"
! 90: #define CVS_PATH_CONFIG CVS_PATH_ROOT "/config"
! 91: #define CVS_PATH_CVSIGNORE CVS_PATH_ROOT "/cvsignore"
! 92: #define CVS_PATH_CVSWRAPPERS CVS_PATH_ROOT "/cvswrappers"
! 93: #define CVS_PATH_EDITINFO CVS_PATH_ROOT "/editinfo"
! 94: #define CVS_PATH_HISTORY CVS_PATH_ROOT "/history"
! 95: #define CVS_PATH_LOGINFO CVS_PATH_ROOT "/loginfo"
! 96: #define CVS_PATH_MODULES CVS_PATH_ROOT "/modules"
! 97: #define CVS_PATH_NOTIFY CVS_PATH_ROOT "/notify"
! 98: #define CVS_PATH_RCSINFO CVS_PATH_ROOT "/rcsinfo"
! 99: #define CVS_PATH_TAGINFO CVS_PATH_ROOT "/taginfo"
! 100: #define CVS_PATH_VERIFYMSG CVS_PATH_ROOT "/verifymsg"
! 101:
! 102:
! 103: /* client-side paths */
! 104: #define CVS_PATH_RC ".cvsrc"
! 105: #define CVS_PATH_CVSDIR "CVS"
! 106: #define CVS_PATH_ENTRIES CVS_PATH_CVSDIR "/Entries"
! 107: #define CVS_PATH_STATICENTRIES CVS_PATH_CVSDIR "/Entries.Static"
! 108: #define CVS_PATH_LOGENTRIES CVS_PATH_CVSDIR "/Entries.Log"
! 109: #define CVS_PATH_ROOTSPEC CVS_PATH_CVSDIR "/Root"
! 110: #define CVS_PATH_REPOSITORY CVS_PATH_CVSDIR "/Repository"
! 111:
! 112:
! 113: struct cvs_file;
! 114: struct cvs_dir;
! 115:
! 116:
! 117: struct cvs_op {
! 118: u_int co_op;
! 119: uid_t co_uid; /* user performing the operation */
! 120: char *co_path; /* target path of the operation */
! 121: char *co_tag; /* tag or branch, NULL if HEAD */
! 122: };
! 123:
! 124:
! 125:
! 126: struct cvsroot {
! 127: char *cr_str;
! 128: u_int cr_method;
! 129: char *cr_buf;
! 130: char *cr_user;
! 131: char *cr_pass;
! 132: char *cr_host;
! 133: char *cr_dir;
! 134: u_int cr_port;
! 135: u_int cr_ref;
! 136:
! 137: /* connection data */
! 138: FILE *cr_srvin;
! 139: FILE *cr_srvout;
! 140: };
! 141:
! 142:
! 143: #define CF_STAT 0x01 /* allocate space for file stats */
! 144: #define CF_IGNORE 0x02 /* apply regular ignore rules */
! 145: #define CF_RECURSE 0x04 /* recurse on directory operations */
! 146: #define CF_SORT 0x08 /* all files are sorted alphabetically */
! 147: #define CF_KNOWN 0x10 /* only recurse in directories known to CVS */
! 148: #define CF_CREATE 0x20 /* create if file does not exist */
! 149:
! 150:
! 151: /*
! 152: * The cvs_file structure is used to represent any file or directory within
! 153: * the CVS tree's hierarchy. The <cf_path> field is a path relative to the
! 154: * directory in which the cvs command was executed. The <cf_parent> field
! 155: * points back to the parent node in the directory tree structure (it is
! 156: * NULL if the directory is at the wd of the command).
! 157: *
! 158: * The <cf_cvstat> field gives the file's status with regards to the CVS
! 159: * repository. The file can be in any one of the CVS_FST_* states.
! 160: * If the file's type is DT_DIR, then the <cf_ddat> pointer will point to
! 161: * a cvs_dir structure containing data specific to the directory (such as
! 162: * the contents of the directory's CVS/Entries, CVS/Root, etc.).
! 163: */
! 164:
! 165: #define CVS_FST_UNKNOWN 0
! 166: #define CVS_FST_UPTODATE 1
! 167: #define CVS_FST_MODIFIED 2
! 168: #define CVS_FST_ADDED 3
! 169: #define CVS_FST_REMOVED 4
! 170: #define CVS_FST_CONFLICT 5
! 171: #define CVS_FST_PATCHED 6
! 172:
! 173:
! 174: TAILQ_HEAD(cvs_flist, cvs_file);
! 175:
! 176:
! 177: typedef struct cvs_file {
! 178: char *cf_path;
! 179: struct cvs_file *cf_parent; /* parent directory (NULL if none) */
! 180: char *cf_name;
! 181: u_int16_t cf_cvstat; /* cvs status of the file */
! 182: u_int16_t cf_type; /* uses values from dirent.h */
! 183: struct stat *cf_stat; /* only available with CF_STAT flag */
! 184: struct cvs_dir *cf_ddat; /* only for directories */
! 185:
! 186: TAILQ_ENTRY(cvs_file) cf_list;
! 187: } CVSFILE;
! 188:
! 189:
! 190: struct cvs_dir {
! 191: struct cvsroot *cd_root;
! 192: char *cd_repo;
! 193: struct cvs_flist cd_files;
! 194: };
! 195:
! 196: int cvs_file_init (void);
! 197: int cvs_file_ignore (const char *);
! 198: int cvs_file_chkign (const char *);
! 199: CVSFILE* cvs_file_create (const char *, u_int, mode_t);
! 200: CVSFILE* cvs_file_get (const char *, int);
! 201: CVSFILE* cvs_file_getspec (char **, int, int);
! 202: void cvs_file_free (struct cvs_file *);
! 203: int cvs_file_examine (CVSFILE *, int (*)(CVSFILE *, void *), void *);
! 204:
! 205:
! 206: #endif /* FILE_H */