1 I thought it would be a neat idea to inspire myself to do this project by
     2 keeping track of how long it actually takes me to accomplish each part of it.
     3 
     4 I've chosen Ruby because I like the aesthetics of the language and, like the
     5 Python motto, it comes with " batteries included."
     6 
     7 2023-09-22: Started!
     8 
     9 Take a repo as a path from input, error if not found or no .git dir:
    10 
    11     0854 to 0903 = 9 min
    12 
    13 cd to repo dir, get repo 'name' as basename via git
    14 (proves viability of backticks to shell out to git)
    15 
    16     0840 to 0855 = 15 min
    17 
    18 list files in current repo, "parse" list into array
    19 
    20     0900 to 0923 = 23 min
    21 
    22 hard-code output dir, append repo name as repo output
    23 prompt to create dir if it doesn't exist
    24 
    25     0923 to 0935 = 12 min
    26 
    27 write initial index file to repo output dir
    28 (include repo name as page title and file list as html bullets)
    29 
    30     0942 to 0955 = 13 min
    31 
    32 make raw dir for copies of the raw repo files
    33 and html dir for individual file html pages
    34 
    35     0902 to 0903 = 1 min
    36 
    37 for each file:
    38 
    39     * link in index to fname.html
    40 
    41         0856 to 0857 = 1 min
    42 
    43     * make a .html page for each file
    44 
    45         0904 to 0917 = 13 min
    46 
    47     * copy source file to output
    48 
    49         0858 to 0859 = 1 min
    50 
    51     * link to raw source file in page
    52 
    53         0918 to 0920 = 2 min
    54 
    55     * if image, display in page
    56 
    57         0921 to 1926 = 5 min
    58 
    59     * detect binary files...
    60 
    61         * "normal" method attempts
    62 
    63             1450 to 1523 = 33 min
    64 
    65         * new idea: look for control characters and also
    66           count newlines to get a feel for the 'shape' of the
    67           file, *if* it is readable characters. (Minified .js source
    68           won't pass this readability test.)
    69 
    70             1637 to 1650 = 13 min
    71 
    72         * continuing above idea - writing is_readable.rb to test
    73           various files quickly...
    74           then adapt to become a function in the program
    75 
    76             0816 to 0910 = 54 min
    77 
    78     * if text source, display with line nums
    79 
    80         1248 to 1254 = 6 min
    81 
    82     * make line nums into anchor links
    83 
    84         1441 to 1446 = 5 min
    85 
    86     * correctly display source HTML with pre whitespace and
    87       right-justified line numbers
    88 
    89         0950 to 1019 = 29 min
    90 
    91 * Process README with tools pre-installed on Slackware Linux
    92 
    93     * detect readme file and its type (text or markdown)
    94 
    95         0827 to 0911 = 44 min
    96 
    97     * .txt verbatim in <pre>
    98 
    99         0915 to 0921 = 6 min
   100 
   101     * .md/.markdown via "rat-flavored markdown", whatever that ends up being
   102 
   103         1256 to 1305 = 9 min   (markdown_py - python, already installed)
   104         1611 to 1631 = 20 min  (RDoc and darkfish - ruby, core module)
   105         0841 to 0847 = 6 min   (discount - c)
   106         1736 to 1741 = 5 min   continued...
   107 
   108     * asciidoc? (NOPE! I'm gonna convert those to md)
   109 
   110     * index/landing page should contain file list (limit to first 20)
   111       followed by readme
   112 
   113         1824 to 1832 = 9 min
   114 
   115 * Add LICENSE and update README
   116 
   117     0740 to 0809 = 29 min
   118 
   119 * Remove hard-coded output path, get it from command line args
   120 
   121     0813 to 0819 = 6 min
   122 
   123 * Common page header
   124 
   125     * header function - just return string with html
   126 
   127         1023 to 1035 = 12 min
   128 
   129     * and take css link (optional) from 3rd cli arg
   130 
   131         1410 to 1425 = 15 min
   132 
   133     * get description from .git/description file
   134 
   135         1442 to 1452 = 10 min
   136 
   137     * make relative links to repo pages in header
   138       (and spent some time making header prettier)
   139 
   140         1520 to 1545 = 25 min
   141 
   142 * Make files page (simple list, can hide bullets with css)
   143 
   144     1631 to 1637 = 6 min
   145 
   146 * Make commit history page (simple log in <pre> tag)
   147 
   148     1638 to 1642 = 4 min
   149 
   150 * Draw a cute little ratty logo
   151 
   152     1808 to 1843 = 35 min
   153 
   154 * Make .git link for http cloning
   155 
   156     * first, do a proof of concept...
   157 
   158         2105 to 2128 = 23 min
   159 
   160     * create bare repo foo.git upon new repo creation
   161         (git clone --bare input_foo output/foo/foo.git)
   162 
   163         0750 to 0804 = 14 min
   164 
   165     * pull changes when already exists and update 4 web:
   166          cd output/foo/foo.git
   167          git ???? <--- turns out it's fetch to update
   168          git update-server-info
   169 
   170         0805 to 0839 = 34 min
   171 
   172     * add clone instructions to header, test it
   173 
   174         0841 to 0850 = 9 min
   175 
   176 * Make common footer with RepoRat link and date-time generated
   177 
   178         0908 to 0916 = 8 min
   179 
   180 * Use a config file (itself ruby source!) instead of CLI args
   181 
   182     1143 to 1221 = 38 min
   183 
   184 * run from repo root, don't take repo dir from cli arg
   185 
   186     1937 to 1949 = 12 min
   187 
   188 2023-09-29: Well, that does it for now.