Convert to native NQP-rx regex; move last bits of Glue functionality to Util; kill...
[parrot-plumage:parrot-plumage.git] / TASKS
1 SHARE-A-TASK
2
3 We need these tasks done, and anyone can do them.
4 Take one and run with it.  Please.
5
6
7 --------
8 Filter dependency list against local system
9
10 Given a set of dependencies, some of which might be satisfied via locally
11 installed binaries/libraries/packages, determine which are still unresolved.
12
13 This will require some new subsystems (we can do these one at a time, slowly
14 handling more cases correctly, instead of trying to finish them all at once):
15
16 1. Keep track of which Plumage projects are currently installed, and all of
17    their related version information, and search against that info.
18
19 2. Implement a function that searches a path for binaries (like 'which').
20    Bonus points for determining "brand" and version as well.
21
22 3. Use %VM<config> to find local binary names for the basic build tools
23    and check that they are installed using the above function.
24
25 4. Implement a function that searches for system libraries and can
26    determine what "brand"/version the library represents.
27
28 5. Given a system package name, use apt/yum/etc. to determine if the
29    system package is installed and of the right version.  (This is actually
30    several tasks, of course: one for each platform/packaging system.)
31
32 6. Design and implement some way to map agreed-upon virtual dependency names
33    to system package names on various platforms.
34
35 STATUS: Currently #1, #2, and #3 are partially implemented.
36
37 --------
38 Handle unresolved dependencies properly
39
40 Determine which unresolved dependencies can be handled by Plumage installing
41 additional projects on its own, and do so.  For the remainder, help the user
42 figure out what to install to fulfill the missing dependencies.
43
44 STATUS: This is partially implemented.
45
46 --------
47 Test using local mock project repositories
48
49 Use 'git init' and 'svnadmin create' to build local repositories when
50 setting up Plumage's own test suite, so that our tests don't require
51 network access to work.
52
53 --------
54 Support file:/// URI scheme in Plumage::Downloader
55
56 Exactly what it says.  We'll want this especially in Plumage's test suite,
57 to enable network-free testing.  But our end users will want this too, for
58 private projects or local forks.
59
60 --------
61 Gracefully handle authenticated Subversion submodules
62
63 Most of the time when fetching from a source repository the top level project
64 checkout_uri will be public, and anyone will be able to download it.  Not so
65 the submodules; in fact our very first Subversion project, Close, has private
66 (authenticated) submodules.  If the user does not have the proper credentials
67 for a submodule, the fetch should gracefully continue on the assumption that
68 these submodules are not necessary for building the base project.
69
70 We will eventually need to deal with proper error handling if the top level
71 project itself requires unavailable credentials or the project won't build
72 with missing submodules, but that can probably be put off for now.
73
74 --------
75 Adding more "builtins" to Util.nqp:
76
77 The guiding principles are:
78
79 1. Do the most with the least.
80 2. It doesn't have to be perfect.
81 3. It's handy if the arguments are similar to the ones in Perl 6.
82
83 What we need:
84
85 * Filesystem
86   * Examples: file tests, directory tree walker, rm_rf, more?
87
88 * String slinging and especially filesystem path string munging
89   * Examples: more?
90
91 --------
92 Data structure merge/overlay
93
94 The basic use case: Take a data structure of default configuration or
95 metadata, overlay it with values from a "user defaults" JSON file, overlay
96 that with values from a parsed JSON file for a particular project, and then
97 overlay *that* with command line options or other runtime values.
98
99 Two possible ways to do this:
100
101 1. Actually merge the trees into a single data structure, replacing "older"
102    values with the same key path as "newer" values.
103
104 2. Make a proxy object that can store references to several data structures.
105    Any lookups in the proxy data structure are looked up in turn in each real
106    structure in order until a matching entry is found.  Sets to the proxy are
107    passed on to only the real structure which is at the top of the "stack".
108    (For convenience in implementation, the writable structure may be special
109    in some way, such as always starting empty.)
110
111 STATUS: We already have a very simplified subset of this functionality (see
112 merge_tree_structures() in plumage.nqp), but I suspect we'll want the full
113 version before long.