Annotation of src/usr.bin/cvs/file.h, Revision 1.26
1.26 ! xsa 1: /* $OpenBSD: file.h,v 1.25 2005/07/23 11:19:46 joris Exp $ */
1.1 jfb 2: /*
3: * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org>
1.11 tedu 4: * All rights reserved.
1.1 jfb 5: *
1.11 tedu 6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions
8: * are met:
1.1 jfb 9: *
1.11 tedu 10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
1.1 jfb 12: * 2. The name of the author may not be used to endorse or promote products
1.11 tedu 13: * derived from this software without specific prior written permission.
1.1 jfb 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
1.11 tedu 24: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.1 jfb 25: */
26:
27: #ifndef FILE_H
28: #define FILE_H
29:
30: #include <sys/param.h>
1.3 jfb 31:
1.1 jfb 32: #include <dirent.h>
1.9 jfb 33: #include <search.h>
1.1 jfb 34:
1.16 jfb 35: #include "rcs.h"
36:
1.1 jfb 37: struct cvs_file;
1.5 jfb 38: struct cvs_entries;
1.1 jfb 39:
40:
1.26 ! xsa 41: #define CVS_FILE_MAXDEPTH 32
1.9 jfb 42:
43:
1.26 ! xsa 44: #define CF_STAT 0x01 /* obsolete */
! 45: #define CF_IGNORE 0x02 /* apply regular ignore rules */
! 46: #define CF_RECURSE 0x04 /* recurse on directory operations */
! 47: #define CF_SORT 0x08 /* all files are sorted alphabetically */
! 48: #define CF_KNOWN 0x10 /* only recurse in directories known to CVS */
! 49: #define CF_CREATE 0x20 /* create if file does not exist */
! 50: #define CF_MKADMIN 0x40 /* create admin files if they're missing */
! 51: #define CF_NOSYMS 0x80 /* ignore symbolic links */
! 52: #define CF_NOFILES 0x100 /* don't load any files inside a directory */
1.1 jfb 53:
54: /*
55: * The cvs_file structure is used to represent any file or directory within
56: * the CVS tree's hierarchy. The <cf_path> field is a path relative to the
57: * directory in which the cvs command was executed. The <cf_parent> field
58: * points back to the parent node in the directory tree structure (it is
59: * NULL if the directory is at the wd of the command).
60: *
61: * The <cf_cvstat> field gives the file's status with regards to the CVS
62: * repository. The file can be in any one of the CVS_FST_* states.
63: */
1.26 ! xsa 64: #define CVS_FST_UNKNOWN 0 /* Unknown */
! 65: #define CVS_FST_UPTODATE 1 /* Up-to-date */
! 66: #define CVS_FST_MODIFIED 2 /* Locally Modified */
! 67: #define CVS_FST_ADDED 3 /* Locally Added */
! 68: #define CVS_FST_REMOVED 4 /* Locally Removed */
! 69: #define CVS_FST_CONFLICT 5 /* Unresolved Conflict */
! 70: #define CVS_FST_PATCHED 6
! 71: #define CVS_FST_LOST 7 /* Needs Checkout */
1.1 jfb 72:
1.11 tedu 73:
1.16 jfb 74: SIMPLEQ_HEAD(cvs_flist, cvs_file);
1.1 jfb 75:
76: typedef struct cvs_file {
1.26 ! xsa 77: struct cvs_file *cf_parent; /* parent directory (NULL if none) */
1.25 joris 78:
79: /*
80: * cf_name contains the basename of the fullpath
81: * cf_dir contains the parent directory the file or dir is in.
82: * if cf_dir is NULL the file is in the parent directory.
83: */
1.26 ! xsa 84: const char *cf_name;
! 85: const char *cf_dir;
1.25 joris 86:
1.26 ! xsa 87: mode_t cf_mode;
! 88: u_int8_t cf_cvstat; /* cvs status of the file */
! 89: u_int8_t cf_type; /* uses values from dirent.h */
! 90: u_int16_t cf_flags;
1.16 jfb 91:
92: union {
93: struct {
1.26 ! xsa 94: RCSNUM *cd_lrev; /* local revision */
! 95: time_t cd_etime; /* time in Entries file */
! 96: time_t cd_mtime;
! 97: char *cd_tag;
! 98: char *cd_opts;
1.16 jfb 99: } cf_reg;
100: struct {
1.26 ! xsa 101: char *cd_repo;
! 102: struct cvsroot *cd_root;
! 103: struct cvs_flist cd_files;
1.16 jfb 104: } cf_dir;
105: } cf_td;
1.1 jfb 106:
1.26 ! xsa 107: SIMPLEQ_ENTRY(cvs_file) cf_list;
1.1 jfb 108: } CVSFILE;
109:
1.16 jfb 110: /* only valid for regular files */
1.26 ! xsa 111: #define cf_etime cf_td.cf_reg.cd_etime
! 112: #define cf_mtime cf_td.cf_reg.cd_mtime
! 113: #define cf_lrev cf_td.cf_reg.cd_lrev
! 114: #define cf_tag cf_td.cf_reg.cd_tag
! 115: #define cf_opts cf_td.cf_reg.cd_opts
1.16 jfb 116:
117: /* only valid for directories */
1.26 ! xsa 118: #define cf_files cf_td.cf_dir.cd_files
! 119: #define cf_repo cf_td.cf_dir.cd_repo
! 120: #define cf_root cf_td.cf_dir.cd_root
1.15 jfb 121:
1.1 jfb 122:
1.8 jfb 123:
1.26 ! xsa 124: #define CVS_DIRF_STATIC 0x01
! 125: #define CVS_DIRF_STICKY 0x02
! 126: #define CVS_DIRF_BASE 0x04
! 127: #define CVS_GDIR_IGNORE 0x08
! 128: #define CVS_FILE_ONDISK 0x10
1.8 jfb 129:
1.13 jfb 130: #define CVS_DIR_ROOT(f) ((((f)->cf_type == DT_DIR) && \
1.16 jfb 131: ((f)->cf_root != NULL)) ? (f)->cf_root : \
132: (((f)->cf_parent == NULL) ? NULL : (f)->cf_parent->cf_root))
1.3 jfb 133:
134: #define CVS_DIR_REPO(f) (((f)->cf_type == DT_DIR) ? \
1.16 jfb 135: (f)->cf_repo : (((f)->cf_parent == NULL) ? \
136: NULL : (f)->cf_parent->cf_repo))
1.2 jfb 137:
1.26 ! xsa 138: int cvs_file_init(void);
! 139: int cvs_file_ignore(const char *);
! 140: int cvs_file_chkign(const char *);
! 141: int cvs_file_get(const char *, int, int (*)(CVSFILE *, void *),
! 142: void *, struct cvs_flist *);
! 143: int cvs_file_getspec(char **, int, int, int (*)(CVSFILE *, void *),
! 144: void *, struct cvs_flist *);
! 145: CVSFILE *cvs_file_loadinfo(char *, int, int (*)(CVSFILE *, void *), void *,
! 146: int);
! 147:
! 148: CVSFILE *cvs_file_create(CVSFILE *, const char *, u_int, mode_t);
! 149: CVSFILE *cvs_file_copy(CVSFILE *);
! 150: int cvs_file_attach(CVSFILE *, CVSFILE *);
! 151: int cvs_file_examine(CVSFILE *, int (*)(CVSFILE *, void *), void *);
! 152:
! 153: int cvs_file_init(void);
! 154: int cvs_file_ignore(const char *);
! 155: int cvs_file_chkign(const char *);
! 156: CVSFILE *cvs_file_load(const char *, int);
! 157: CVSFILE *cvs_file_find(CVSFILE *, const char *);
! 158: char *cvs_file_getpath(CVSFILE *, char *, size_t);
! 159: void cvs_file_free(CVSFILE *);
! 160: int cvs_file_prune(char *);
1.1 jfb 161:
1.26 ! xsa 162: #endif /* FILE_H */