unstow_node: extract new unstow_valid_link() sub
[gnu-stow.git] / CONTRIBUTING.md
blob1bcd0f45f9b7f9794605eb0d8a24185ec07481aa
1 Contributing to GNU Stow
2 ========================
4 Development of Stow, and GNU in general, is a volunteer effort, and
5 you can contribute.  If you'd like to get involved, it's a good idea to join
6 the [stow-devel](https://lists.gnu.org/mailman/listinfo/stow-devel)
7 mailing list.
9 Bug reporting
10 -------------
12 Please follow the procedure described in [the "Reporting Bugs"
13 section](https://www.gnu.org/software/stow/manual/html_node/Reporting-Bugs.html#Reporting-Bugs)
14 of [the manual](README.md#documentation).
16 Development
17 -----------
19 For [development sources](https://savannah.gnu.org/git/?group=stow)
20 and other information, please see the [Stow project
21 page](http://savannah.gnu.org/projects/stow/) at
22 [savannah.gnu.org](http://savannah.gnu.org).
24 There is also a
25 [stow-devel](https://lists.gnu.org/mailman/listinfo/stow-devel)
26 mailing list (see [Mailing lists](README.md#mailing-lists)).
28 Please be aware that all program source files (excluding the test
29 suite) end in `.in`, and are pre-processed by `Makefile` into
30 corresponding files with that prefix stripped before execution.  So if
31 you want to test any modifications to the source, make sure that you
32 change the `.in` files and then run `make` to regenerate the
33 pre-processed versions before doing any testing.  To avoid forgetting
34 (which can potentially waste a lot of time debugging the wrong code),
35 you can automatically run `make` in an infinite loop every second via:
37     make watch
39 (You could even use fancier approaches like
40 [`inotifywait(1)`](https://www.man7.org/linux/man-pages/man1/inotifywait.1.html)
41 or [Guard](https://guardgem.org/).  But those are probably overkill in
42 this case where the simple `while` loop is plenty good enough.)
44 Testing
45 ~~~~~~~
47 The test suite can be found in the [`t/`](t/) subdirectory.  You can
48 run the test suite via:
50     make check
52 Tests can be run individually as follows.  First you have to ensure
53 that the `t/`, `bin/`, and `lib/` directories are on Perl's search path.
54 Assuming that you run all tests from the root of the repository tree,
55 this will do the job:
57     export PERL5LIB=t:bin:lib
59 (Not all tests require all of these, but it's safer to include all of
60 them.)
62 Secondly, be aware that if you want to test modifications to the
63 source files, you will need to run `make watch`, or `make` before each
64 test run as explained above.
66 Now running an individual test is as simple as:
68     perl t/chkstow.t
70 or with a given debugging verbosity corresponding to the `-v` / `--verbose`
71 command-line option:
73     TEST_VERBOSE=4 perl t/chkstow.t
75 The [`prove(1)` test runner](https://perldoc.perl.org/prove) is another
76 good alternative which provides several handy extra features.  Invocation
77 is very similar, e.g.:
79     prove t/stow.t
81 or to run the whole suite:
83     prove
85 However currently there is an issue where this interferes with
86 `TEST_VERBOSE`.
88 Translating Stow
89 ----------------
91 Stow is not currently multi-lingual, but patches would be very
92 gratefully accepted. Please e-mail
93 [stow-devel](https://lists.gnu.org/mailman/listinfo/stow-devel) if you
94 intend to work on this.
96 Maintainers
97 -----------
99 Stow is currently being maintained by Adam Spiers.  Please use [the
100 mailing lists](README.md#mailing-lists).
102 Helping the GNU project
103 -----------------------
105 For more general information, please read [How to help
106 GNU](https://www.gnu.org/help/).