VirtualBox

source: vbox/trunk/src/bldprogs/scm.h@ 41766

Last change on this file since 41766 was 40534, checked in by vboxsync, 13 years ago

scm: more splitting and some header merging.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1/* $Id: scm.h 40534 2012-03-19 11:49:34Z vboxsync $ */
2/** @file
3 * IPRT Testcase / Tool - Source Code Massager.
4 */
5
6/*
7 * Copyright (C) 2010-2012 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19#ifndef ___scm_h___
20#define ___scm_h___
21
22#include "scmstream.h"
23
24RT_C_DECLS_BEGIN
25
26/** Pointer to the rewriter state. */
27typedef struct SCMRWSTATE *PSCMRWSTATE;
28/** Pointer to const massager settings. */
29typedef struct SCMSETTINGSBASE const *PCSCMSETTINGSBASE;
30
31
32/** @name Subversion Access
33 * @{ */
34
35/**
36 * SVN property.
37 */
38typedef struct SCMSVNPROP
39{
40 /** The property. */
41 char *pszName;
42 /** The value.
43 * When used to record updates, this can be set to NULL to trigger the
44 * deletion of the property. */
45 char *pszValue;
46} SCMSVNPROP;
47/** Pointer to a SVN property. */
48typedef SCMSVNPROP *PSCMSVNPROP;
49/** Pointer to a const SVN property. */
50typedef SCMSVNPROP const *PCSCMSVNPROP;
51
52
53bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState);
54int ScmSvnQueryProperty(PSCMRWSTATE pState, const char *pszName, char **ppszValue);
55int ScmSvnSetProperty(PSCMRWSTATE pState, const char *pszName, const char *pszValue);
56int ScmSvnDelProperty(PSCMRWSTATE pState, const char *pszName);
57int ScmSvnDisplayChanges(PSCMRWSTATE pState);
58int ScmSvnApplyChanges(PSCMRWSTATE pState);
59
60/** @} */
61
62
63/** @name Rewriters
64 * @{ */
65
66/**
67 * Rewriter state.
68 */
69typedef struct SCMRWSTATE
70{
71 /** The filename. */
72 const char *pszFilename;
73 /** Set after the printing the first verbose message about a file under
74 * rewrite. */
75 bool fFirst;
76 /** The number of SVN property changes. */
77 size_t cSvnPropChanges;
78 /** Pointer to an array of SVN property changes. */
79 struct SCMSVNPROP *paSvnPropChanges;
80} SCMRWSTATE;
81
82/**
83 * A rewriter.
84 *
85 * This works like a stream editor, reading @a pIn, modifying it and writing it
86 * to @a pOut.
87 *
88 * @returns true if any changes were made, false if not.
89 * @param pIn The input stream.
90 * @param pOut The output stream.
91 * @param pSettings The settings.
92 */
93typedef bool FNSCMREWRITER(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings);
94/** Pointer to a rewriter method. */
95typedef FNSCMREWRITER *PFNSCMREWRITER;
96
97FNSCMREWRITER rewrite_StripTrailingBlanks;
98FNSCMREWRITER rewrite_ExpandTabs;
99FNSCMREWRITER rewrite_ForceNativeEol;
100FNSCMREWRITER rewrite_ForceLF;
101FNSCMREWRITER rewrite_ForceCRLF;
102FNSCMREWRITER rewrite_AdjustTrailingLines;
103FNSCMREWRITER rewrite_SvnNoExecutable;
104FNSCMREWRITER rewrite_SvnKeywords;
105FNSCMREWRITER rewrite_Makefile_kup;
106FNSCMREWRITER rewrite_Makefile_kmk;
107FNSCMREWRITER rewrite_C_and_CPP;
108
109/** @} */
110
111
112/** @name Settings
113 * @{ */
114
115/**
116 * Configuration entry.
117 */
118typedef struct SCMCFGENTRY
119{
120 /** Number of rewriters. */
121 size_t cRewriters;
122 /** Pointer to an array of rewriters. */
123 PFNSCMREWRITER const *papfnRewriter;
124 /** File pattern (simple). */
125 const char *pszFilePattern;
126} SCMCFGENTRY;
127typedef SCMCFGENTRY *PSCMCFGENTRY;
128typedef SCMCFGENTRY const *PCSCMCFGENTRY;
129
130
131/**
132 * Source Code Massager Settings.
133 */
134typedef struct SCMSETTINGSBASE
135{
136 bool fConvertEol;
137 bool fConvertTabs;
138 bool fForceFinalEol;
139 bool fForceTrailingLine;
140 bool fStripTrailingBlanks;
141 bool fStripTrailingLines;
142 /** Only process files that are part of a SVN working copy. */
143 bool fOnlySvnFiles;
144 /** Only recurse into directories containing an .svn dir. */
145 bool fOnlySvnDirs;
146 /** Set svn:eol-style if missing or incorrect. */
147 bool fSetSvnEol;
148 /** Set svn:executable according to type (unusually this means deleting it). */
149 bool fSetSvnExecutable;
150 /** Set svn:keyword if completely or partially missing. */
151 bool fSetSvnKeywords;
152 /** */
153 unsigned cchTab;
154 /** Only consider files matching these patterns. This is only applied to the
155 * base names. */
156 char *pszFilterFiles;
157 /** Filter out files matching the following patterns. This is applied to base
158 * names as well as the absolute paths. */
159 char *pszFilterOutFiles;
160 /** Filter out directories matching the following patterns. This is applied
161 * to base names as well as the absolute paths. All absolute paths ends with a
162 * slash and dot ("/."). */
163 char *pszFilterOutDirs;
164} SCMSETTINGSBASE;
165/** Pointer to massager settings. */
166typedef SCMSETTINGSBASE *PSCMSETTINGSBASE;
167
168/**
169 * File/dir pattern + options.
170 */
171typedef struct SCMPATRNOPTPAIR
172{
173 char *pszPattern;
174 char *pszOptions;
175} SCMPATRNOPTPAIR;
176/** Pointer to a pattern + option pair. */
177typedef SCMPATRNOPTPAIR *PSCMPATRNOPTPAIR;
178
179
180/** Pointer to a settings set. */
181typedef struct SCMSETTINGS *PSCMSETTINGS;
182/**
183 * Settings set.
184 *
185 * This structure is constructed from the command line arguments or any
186 * .scm-settings file found in a directory we recurse into. When recursing in
187 * and out of a directory, we push and pop a settings set for it.
188 *
189 * The .scm-settings file has two kinds of setttings, first there are the
190 * unqualified base settings and then there are the settings which applies to a
191 * set of files or directories. The former are lines with command line options.
192 * For the latter, the options are preceded by a string pattern and a colon.
193 * The pattern specifies which files (and/or directories) the options applies
194 * to.
195 *
196 * We parse the base options into the Base member and put the others into the
197 * paPairs array.
198 */
199typedef struct SCMSETTINGS
200{
201 /** Pointer to the setting file below us in the stack. */
202 PSCMSETTINGS pDown;
203 /** Pointer to the setting file above us in the stack. */
204 PSCMSETTINGS pUp;
205 /** File/dir patterns and their options. */
206 PSCMPATRNOPTPAIR paPairs;
207 /** The number of entires in paPairs. */
208 uint32_t cPairs;
209 /** The base settings that was read out of the file. */
210 SCMSETTINGSBASE Base;
211} SCMSETTINGS;
212/** Pointer to a const settings set. */
213typedef SCMSETTINGS const *PCSCMSETTINGS;
214
215/** @} */
216
217
218void ScmVerbose(PSCMRWSTATE pState, int iLevel, const char *pszFormat, ...);
219
220extern const char g_szTabSpaces[16+1];
221
222RT_C_DECLS_END
223
224#endif
225
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette