Annotation of src/usr.bin/cvs/file.h, Revision 1.3
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>
1.3 ! jfb 31:
1.1 jfb 32: #include <dirent.h>
33:
34: struct cvs_file;
35: struct cvs_dir;
36:
37:
1.3 ! jfb 38: #define CF_STAT 0x01 /* allocate space for file stats */
! 39: #define CF_IGNORE 0x02 /* apply regular ignore rules */
! 40: #define CF_RECURSE 0x04 /* recurse on directory operations */
! 41: #define CF_SORT 0x08 /* all files are sorted alphabetically */
! 42: #define CF_KNOWN 0x10 /* only recurse in directories known to CVS */
! 43: #define CF_CREATE 0x20 /* create if file does not exist */
! 44: #define CF_MKADMIN 0x40 /* create administrative files if they're missing */
1.1 jfb 45:
46:
47: /*
48: * The cvs_file structure is used to represent any file or directory within
49: * the CVS tree's hierarchy. The <cf_path> field is a path relative to the
50: * directory in which the cvs command was executed. The <cf_parent> field
51: * points back to the parent node in the directory tree structure (it is
52: * NULL if the directory is at the wd of the command).
53: *
54: * The <cf_cvstat> field gives the file's status with regards to the CVS
55: * repository. The file can be in any one of the CVS_FST_* states.
56: * If the file's type is DT_DIR, then the <cf_ddat> pointer will point to
57: * a cvs_dir structure containing data specific to the directory (such as
58: * the contents of the directory's CVS/Entries, CVS/Root, etc.).
59: */
60:
61: #define CVS_FST_UNKNOWN 0
62: #define CVS_FST_UPTODATE 1
63: #define CVS_FST_MODIFIED 2
64: #define CVS_FST_ADDED 3
65: #define CVS_FST_REMOVED 4
66: #define CVS_FST_CONFLICT 5
67: #define CVS_FST_PATCHED 6
68:
69:
70: TAILQ_HEAD(cvs_flist, cvs_file);
71:
72:
73: typedef struct cvs_file {
74: char *cf_path;
75: struct cvs_file *cf_parent; /* parent directory (NULL if none) */
76: char *cf_name;
77: u_int16_t cf_cvstat; /* cvs status of the file */
78: u_int16_t cf_type; /* uses values from dirent.h */
79: struct stat *cf_stat; /* only available with CF_STAT flag */
80: struct cvs_dir *cf_ddat; /* only for directories */
81:
82: TAILQ_ENTRY(cvs_file) cf_list;
83: } CVSFILE;
84:
85:
86: struct cvs_dir {
87: struct cvsroot *cd_root;
88: char *cd_repo;
1.3 ! jfb 89: CVSENTRIES *cd_ent;
1.1 jfb 90: struct cvs_flist cd_files;
91: };
92:
1.2 jfb 93:
1.3 ! jfb 94: #define CVS_DIR_ROOT(f) (((f)->cf_type == DT_DIR) ? \
1.2 jfb 95: (f)->cf_ddat->cd_root : (((f)->cf_parent == NULL) ? \
96: NULL : (f)->cf_parent->cf_ddat->cd_root))
97:
1.3 ! jfb 98: #define CVS_DIR_ENTRIES(f) (((f)->cf_type == DT_DIR) ? \
! 99: (f)->cf_ddat->cd_ent : (((f)->cf_parent == NULL) ? \
! 100: NULL : (f)->cf_parent->cf_ddat->cd_ent))
! 101:
! 102: #define CVS_DIR_REPO(f) (((f)->cf_type == DT_DIR) ? \
! 103: (f)->cf_ddat->cd_repo : (((f)->cf_parent == NULL) ? \
! 104: NULL : (f)->cf_parent->cf_ddat->cd_repo))
1.2 jfb 105:
1.1 jfb 106: int cvs_file_init (void);
107: int cvs_file_ignore (const char *);
108: int cvs_file_chkign (const char *);
109: CVSFILE* cvs_file_create (const char *, u_int, mode_t);
110: CVSFILE* cvs_file_get (const char *, int);
111: CVSFILE* cvs_file_getspec (char **, int, int);
1.2 jfb 112: CVSFILE* cvs_file_find (CVSFILE *, const char *);
113: int cvs_file_examine (CVSFILE *, int (*)(CVSFILE *, void *), void *);
1.1 jfb 114: void cvs_file_free (struct cvs_file *);
115:
116:
117: #endif /* FILE_H */