65 Filters for transforming files on checkout/checkin. This would |
65 Filters for transforming files on checkout/checkin. This would |
66 typically be used for newline processing or other |
66 typically be used for newline processing or other |
67 localization/canonicalization of files. |
67 localization/canonicalization of files. |
68 |
68 |
69 Filters consist of a filter pattern followed by a filter command. |
69 Filters consist of a filter pattern followed by a filter command. |
70 The command must accept data on stdin and return the transformed |
70 Filter patterns are globs by default, rooted at the repository |
71 data on stdout. |
71 root. For example, to match any file ending in ".txt" in the root |
72 |
72 directory only, use the pattern "*.txt". To match any file ending |
73 Example: |
73 in ".c" anywhere in the repository, use the pattern "**.c". |
|
74 |
|
75 The filter command can start with a specifier, either "pipe:" or |
|
76 "tempfile:". If no specifier is given, "pipe:" is used by default. |
|
77 |
|
78 A "pipe:" command must accept data on stdin and return the |
|
79 transformed data on stdout. |
|
80 |
|
81 Pipe example: |
74 |
82 |
75 [encode] |
83 [encode] |
76 # uncompress gzip files on checkin to improve delta compression |
84 # uncompress gzip files on checkin to improve delta compression |
77 # note: not necessarily a good idea, just an example |
85 # note: not necessarily a good idea, just an example |
78 *.gz = gunzip |
86 *.gz = pipe: gunzip |
79 |
87 |
80 [decode] |
88 [decode] |
81 # recompress gzip files when writing them to the working dir |
89 # recompress gzip files when writing them to the working dir (we |
|
90 # can safely omit "pipe:", because it's the default) |
82 *.gz = gzip |
91 *.gz = gzip |
|
92 |
|
93 A "tempfile:" command is a template. The string INFILE is replaced |
|
94 with the name of a temporary file that contains the data to be |
|
95 filtered by the command. The string OUTFILE is replaced with the |
|
96 name of an empty temporary file, where the filtered data must be |
|
97 written by the command. |
|
98 |
|
99 NOTE: the tempfile mechanism is recommended for Windows systems, |
|
100 where the standard shell I/O redirection operators often have |
|
101 strange effects. In particular, if you are doing line ending |
|
102 conversion on Windows using the popular dos2unix and unix2dos |
|
103 programs, you *must* use the tempfile mechanism, as using pipes will |
|
104 corrupt the contents of your files. |
|
105 |
|
106 Tempfile example: |
|
107 |
|
108 [encode] |
|
109 # convert files to unix line ending conventions on checkin |
|
110 **.txt = tempfile: dos2unix -n INFILE OUTFILE |
|
111 |
|
112 [decode] |
|
113 # convert files to windows line ending conventions when writing |
|
114 # them to the working dir |
|
115 **.txt = tempfile: unix2dos -n INFILE OUTFILE |
83 |
116 |
84 hooks:: |
117 hooks:: |
85 Commands that get automatically executed by various actions such as |
118 Commands that get automatically executed by various actions such as |
86 starting or finishing a commit. |
119 starting or finishing a commit. |
87 changegroup;; |
120 changegroup;; |