Skip to content

Commit ae22ef6

Browse files
committed
Merge branch 'automation'
Resolved Conflicts: BY_PLATFORM.md README.md projects.yaml
2 parents 50ae732 + 6370391 commit ae22ef6

23 files changed

+4822
-1524
lines changed

.gitignore

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
docs/_build
2+
tmp.py
3+
htmlcov/
4+
5+
*.py[cod]
6+
7+
# emacs
8+
*~
9+
._*
10+
.\#*
11+
\#*\#
12+
13+
# C extensions
14+
*.so
15+
16+
# Packages
17+
*.egg
18+
*.egg-info
19+
dist
20+
build
21+
eggs
22+
parts
23+
bin
24+
var
25+
sdist
26+
develop-eggs
27+
.installed.cfg
28+
lib
29+
lib64
30+
31+
# Installer logs
32+
pip-log.txt
33+
34+
# Unit test / coverage reports
35+
.coverage
36+
.tox
37+
nosetests.xml
38+
39+
# Translations
40+
*.mo
41+
42+
# Mr Developer
43+
.mr.developer.cfg
44+
.project
45+
.pydevproject
46+
47+
# Vim
48+
*.sw[op]
49+
50+
.cache/

BY_PLATFORM.md

+233-206
Large diffs are not rendered by default.

README.md

+119-119
Large diffs are not rendered by default.

apatite/README.md

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Apatite
2+
3+
A command-line application for curating structured lists of software projects.
4+
5+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Apatite_taill%C3%A9e.jpg/320px-Apatite_taill%C3%A9e.jpg">
6+
7+
First run
8+
9+
`pip install apatite`
10+
11+
Then run
12+
13+
`apatite --help`
14+
15+
And you'll see
16+
17+
```
18+
Usage: /home/mahmoud/virtualenvs/apatite/bin/apatite subcommand [FLAGS]
19+
20+
automation and analytics for curated lists of awesome software.
21+
22+
Normal analysis workflow:
23+
24+
* apatite pull-repos (can take 3-4 hours, 25GB on the full APA, use --targets to limit)
25+
* apatite collect-metrics
26+
* apatite export-metrics
27+
* apatite analyze # TODO
28+
29+
30+
31+
Subcommands:
32+
33+
render generate the list markdown from the yaml listing
34+
normalize normalize project and tag order, checking for duplicates and format divergences,
35+
overwrites the yaml listing
36+
pull-repos clone or pull all projects. requires git, hg, and bzr to be installed for projects in APA
37+
collect-metrics use local clones of repositories (from pull-repos) to gather data about projects
38+
show-recent-metrics shows the most recent metrics collection
39+
export-metrics export a csv with metrics collated from previous collect-metrics runs
40+
show-exportable-metrics show a list of metric names available for export-metrics --cols and --cols-file flags
41+
console use pdb to explore plist and pdir
42+
version print the apatite version and exit
43+
44+
45+
Flags:
46+
47+
--help / -h show this help message and exit
48+
```

apatite/TODO.md

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
2+
# Fetching/pulling
3+
4+
* Fix outstanding git/hg/bzr clones, either with manual clone_urls or some other method (high pri)
5+
* solfege
6+
* sage
7+
* saleor
8+
* rhodecode
9+
* viewvc
10+
* gedit
11+
* Add SVN support (low pri)
12+
* Remove opsmop
13+
* Establish the importance of libraries vs applications
14+
* The answers for applications differ from that of libraries'
15+
* split out "assets" in sloc (xml, svg, json, yaml, qml)
16+
* maybe docs too? md, tex, rst, org
17+
* tooling: autoconf, make, meson, Dockerfile
18+
* count python files
19+
* update progress bar to say "(done)" instead of name of last project (wicd rn)
20+
* tokei thinks .master = asp.net (also, ignore contrib, ignore vendor, ignore single files)
21+
22+
# Stats Ideas
23+
24+
* Hybridization / Co-occurrence with other languages (sloccount) (javascript, C, Cython, Java, etc.)
25+
* Stars/forks (gh api, requires key) (also important for illustrating the contrast of scales in stars and collaboration)
26+
* License (https://github.com/src-d/go-license-detector/releases)
27+
* Packaging (containers: docker, snap, flatpak; freezers; setup.py/pypi, etc.)
28+
* sloccount
29+
* age / # of contributions, contributors. # of overlapping contributors.
30+
* source control (git vs hg vs bzr)
31+
* correlation between stars and contributors?
32+
* Need to categorize small, medium, large
33+
* Can committer distribution be used as an indicator of maturity?
34+
* Can number of minor contributors be used as a proxy for popularity/usage?
35+
36+
## Architecture
37+
38+
* Server vs GUI vs CLI
39+
* Django vs Flask vs Other Server
40+
* Qt vs GTK vs TK vs Other GUI
41+
* argparse vs click vs other CLI
42+
43+
# Data collection
44+
45+
* command to delete/archive results older than a certain date?
46+
* load all results files
47+
* apatite collect --targets --metrics
48+
* apatite collate --date
49+
* apatite analyze collated_file.json
50+
* apatite-results__2019-08-10T10-10-10__2019-08-10T10-10-10.json (oldest date__newest_date)
51+
* look at all targets for the collection, take the oldest and newest
52+
dates, then generate results filename, then start data collection
53+
* collection needs to take into account existing valid results and resume
54+
* for results collation, accept a date, load all results files with
55+
that date within their range, keep newest results up to that date
56+
* apatite tarchive, apatite merge-tarchive ? (for cross-host results
57+
merging if repeating collection takes too long)
58+
* sloc should be enhanced to create committer identities, grouped by
59+
case-/whitespace-normalized name and email.
60+
* probably add metric name to results file? (faster collation, not an issue now)
61+
62+
## Licenses
63+
64+
Spotchecking the license output
65+
66+
* modoboa is actually ISC, not 0BSD (second guess)
67+
* nvda is actually gplv2, under copying.txt (not bzip2)
68+
* kallithea is actually GPLv3, not MPL
69+
* 30 projects have no data (code is there for at least 15 of those)
70+
71+
# Collation
72+
73+
* Open all files with data between date ranges
74+
* Scan through for unique combinations of supported metrics and still-listed projects
75+
* Keep the most recent data (that isn't newer than the specified date)
76+
* isodates don't need to be parsed to be compared; stick to string comps for speed
77+
* Future: Make note of which data is missing
78+
79+
# Tagsonomy improvements
80+
81+
* Console (and CLI/TUI/GUI) is more about UI than target platform
82+
83+
# Features
84+
85+
* Stale projects (have not been updated for more than X% of their lifespan)
86+
87+
# Interesting findings
88+
89+
* Even some older projects have already adopted asyncio. mailman, ipython, mitmproxy, even portage
90+
* The weird hybrids. Haskell + Python (Ganeti, developed by google). Java + Python (nimbus, but 2014). Rust + Python (pants)
91+
* One of the apps (Meson) has its own sloc type
92+
* One app has all its docs written in TeX
93+
* 90 tox.inis (I'm used to seeing tox for libraries, not applications)
94+
95+
<--! -->

apatite/apatite/__main__.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import os
2+
import sys
3+
4+
from .cli import main
5+
6+
if __name__ == '__main__':
7+
try:
8+
sys.exit(main() or 0)
9+
except Exception:
10+
if os.getenv('APATITE_DEBUG'):
11+
import pdb;pdb.post_mortem()
12+
raise

apatite/apatite/_version.py

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
__version__ = '0.0.1dev'

0 commit comments

Comments
 (0)