Skip to content

Commit 542a447

Browse files
authored
Merge pull request #2159 from wilzbach/build-changelog-menu
Build changelog menu dynamically (replace bash with D code) merged-on-behalf-of: Vladimir Panteleev <[email protected]>
2 parents 1bde697 + 0b75464 commit 542a447

File tree

5 files changed

+35
-147
lines changed

5 files changed

+35
-147
lines changed

.circleci/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -uexo pipefail
44

5-
HOST_DMD_VER=2.072.2 # same as in dmd/src/posix.mak
5+
HOST_DMD_VER=2.078.1
66
CURL_USER_AGENT="CirleCI $(curl --version | head -n 1)"
77
DUB=${DUB:-$HOME/dlang/dub/dub}
88
N=2

changelog/changelog.ddoc

Lines changed: 2 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -72,106 +72,5 @@ PHOBOSPR = $(PULL_REQUEST phobos,$1)
7272
_=
7373

7474
CHANGELOG_VERSION = $(LI <a id="$1" href="$1.html">$1</a><span class="hide-from-nav"> ($2, $3)</span>)
75-
CHANGELOG_VERSION_PRE = $(LI <a id="$1" href="$1_pre.html">$1</a><span class="hide-from-nav"> ($+)</span>)
76-
CHANGELOG_VERSION_NIGHTLY = $(LI <a id="pending" href="pending.html">Nightly</a>)
77-
_=BEGIN_GENERATED_CHANGELOG_VERSIONS
78-
CHANGELOG_VERSIONS =
79-
$(CHANGELOG_VERSION_NIGHTLY)
80-
$(CHANGELOG_VERSION 2.078.1, Jan 21, 2018)
81-
$(CHANGELOG_VERSION 2.078.0, Jan 01, 2018)
82-
$(CHANGELOG_VERSION 2.077.1, Nov 29, 2017)
83-
$(CHANGELOG_VERSION 2.077.0, Nov 1, 2017)
84-
$(CHANGELOG_VERSION 2.076.1, Oct 09, 2017)
85-
$(CHANGELOG_VERSION 2.076.0, Sep 1, 2017)
86-
$(CHANGELOG_VERSION 2.075.1, Aug 11, 2017)
87-
$(CHANGELOG_VERSION 2.075.0, Jul 19, 2017)
88-
$(CHANGELOG_VERSION 2.074.1, May 30, 2017)
89-
$(CHANGELOG_VERSION 2.074.0, Apr 10, 2017)
90-
$(CHANGELOG_VERSION 2.073.2, Mar 09, 2017)
91-
$(CHANGELOG_VERSION 2.073.1, Feb 16, 2017)
92-
$(CHANGELOG_VERSION 2.073.0, Jan 22, 2017)
93-
$(CHANGELOG_VERSION 2.072.2, Dec 31, 2016)
94-
$(CHANGELOG_VERSION 2.072.1, Nov 30, 2016)
95-
$(CHANGELOG_VERSION 2.072.0, Oct 30, 2016)
96-
$(CHANGELOG_VERSION 2.071.2, September 19, 2016)
97-
$(CHANGELOG_VERSION 2.071.1, June 27, 2016)
98-
$(CHANGELOG_VERSION 2.071.0, Apr 5, 2016)
99-
$(CHANGELOG_VERSION 2.070.2, Mar 3, 2016)
100-
$(CHANGELOG_VERSION 2.070.1, Feb 27, 2016)
101-
$(CHANGELOG_VERSION 2.070.0, Jan 27, 2016)
102-
$(CHANGELOG_VERSION 2.069.2, Dec 3, 2015)
103-
$(CHANGELOG_VERSION 2.069.1, Nov 11, 2015)
104-
$(CHANGELOG_VERSION 2.069.0, Nov 3, 2015)
105-
$(CHANGELOG_VERSION 2.068.2, Sep 23, 2015)
106-
$(CHANGELOG_VERSION 2.068.1, Sep 06, 2015)
107-
$(CHANGELOG_VERSION 2.068.0, Aug 09, 2015)
108-
$(CHANGELOG_VERSION 2.067.1, Apr 25, 2015)
109-
$(CHANGELOG_VERSION 2.067.0, Mar 24, 2015)
110-
$(CHANGELOG_VERSION 2.066.1, October 15, 2014)
111-
$(CHANGELOG_VERSION 2.066.0, August 18, 2014)
112-
$(CHANGELOG_VERSION 2.065.0, February 24, 2014)
113-
$(CHANGELOG_VERSION 2.064, November 5, 2013)
114-
$(CHANGELOG_VERSION 2.063, May 28, 2013)
115-
$(CHANGELOG_VERSION 2.062, Feb 18, 2013)
116-
$(CHANGELOG_VERSION 2.061, Jan 1, 2013)
117-
$(CHANGELOG_VERSION 2.060, Aug 2, 2012)
118-
$(CHANGELOG_VERSION 2.059, Apr 12, 2012)
119-
$(CHANGELOG_VERSION 2.058, Feb 14, 2012)
120-
$(CHANGELOG_VERSION 2.057, Dec 13, 2011)
121-
$(CHANGELOG_VERSION 2.056, Oct 26, 2011)
122-
$(CHANGELOG_VERSION 2.055, Sep 4, 2011)
123-
$(CHANGELOG_VERSION 2.054, Jul 10, 2011)
124-
$(CHANGELOG_VERSION 2.053, May 12, 2011)
125-
$(CHANGELOG_VERSION 2.052, Feb 17, 2011)
126-
$(CHANGELOG_VERSION 2.051, Dec 21, 2010)
127-
$(CHANGELOG_VERSION 2.050, Oct 29, 2010)
128-
$(CHANGELOG_VERSION 2.049, Sep 13, 2010)
129-
$(CHANGELOG_VERSION 2.048, Aug 8, 2010)
130-
$(CHANGELOG_VERSION 2.047, Jun 11, 2010)
131-
$(CHANGELOG_VERSION 2.046, May 10, 2010)
132-
$(CHANGELOG_VERSION 2.045, May 4, 2010)
133-
$(CHANGELOG_VERSION 2.044, Apr 30, 2010)
134-
$(CHANGELOG_VERSION 2.043, Apr 6, 2010)
135-
$(CHANGELOG_VERSION 2.042, Mar 19, 2010)
136-
$(CHANGELOG_VERSION 2.041, Mar 7, 2010)
137-
$(CHANGELOG_VERSION 2.040, Jan 29, 2010)
138-
$(CHANGELOG_VERSION 2.039, Jan 1, 2010)
139-
$(CHANGELOG_VERSION 2.038, Dec 30, 2009)
140-
$(CHANGELOG_VERSION 2.037, Dec 3, 2009)
141-
$(CHANGELOG_VERSION 2.036, Nov 5, 2009)
142-
$(CHANGELOG_VERSION 2.035, Oct 14, 2009)
143-
$(CHANGELOG_VERSION 2.034, Oct 11, 2009)
144-
$(CHANGELOG_VERSION 2.033, Oct 5, 2009)
145-
$(CHANGELOG_VERSION 2.032, Sep 2, 2009)
146-
$(CHANGELOG_VERSION 2.031, July 6, 2009)
147-
$(CHANGELOG_VERSION 2.030, May 11, 2009)
148-
$(CHANGELOG_VERSION 2.029, Apr 19, 2009)
149-
$(CHANGELOG_VERSION 2.028, Apr 7, 2009)
150-
$(CHANGELOG_VERSION 2.027, Mar 31, 2009)
151-
$(CHANGELOG_VERSION 2.026, Mar 3, 2009)
152-
$(CHANGELOG_VERSION 2.025, Feb 14, 2009)
153-
$(CHANGELOG_VERSION 2.023, Jan 2, 2009)
154-
$(CHANGELOG_VERSION 2.022, Dec 11, 2008)
155-
$(CHANGELOG_VERSION 2.021, Nov 25, 2008)
156-
$(CHANGELOG_VERSION 2.020, Oct 20, 2008)
157-
$(CHANGELOG_VERSION 2.019, Sep 2, 2008)
158-
$(CHANGELOG_VERSION 2.018, Aug 7, 2008)
159-
$(CHANGELOG_VERSION 2.017, Jul 11, 2008)
160-
$(CHANGELOG_VERSION 2.016, Jul 8, 2008)
161-
$(CHANGELOG_VERSION 2.015, Jun 17, 2008)
162-
$(CHANGELOG_VERSION 2.014, May 16, 2008)
163-
$(CHANGELOG_VERSION 2.013, Apr 22, 2008)
164-
$(CHANGELOG_VERSION 2.012, Mar 6, 2008)
165-
$(CHANGELOG_VERSION 2.011, Feb 18, 2008)
166-
$(CHANGELOG_VERSION 2.010, Jan 20, 2008)
167-
$(CHANGELOG_VERSION 2.009, Jan 1, 2008)
168-
$(CHANGELOG_VERSION 2.008, Nov 27, 2007)
169-
$(CHANGELOG_VERSION 2.007, Oct 31, 2007)
170-
$(CHANGELOG_VERSION 2.006, Oct 16, 2007)
171-
$(CHANGELOG_VERSION 2.005, Oct 1, 2007)
172-
$(CHANGELOG_VERSION 2.004, Sep 5, 2007)
173-
$(CHANGELOG_VERSION 2.003, Jul 21, 2007)
174-
$(CHANGELOG_VERSION 2.002, Jul 1, 2007)
175-
$(CHANGELOG_VERSION 2.001, Jun 27, 2007)
176-
$(CHANGELOG_VERSION 2.000, Jun 17, 2007)
177-
_=END_GENERATED_CHANGELOG_VERSIONS
75+
CHANGELOG_VERSION_PRE = $(LI <a id="$1" href="$1.html" style="display: inline-block">$1</a> (preview) <span class="hide-from-nav"> - scheduled for $+</span>)
76+
CHANGELOG_VERSION_NIGHTLY = $(LI <a id="pending" href="pending.html">Nightly</a> <span class="hide-from-nav"> (preview) - upcoming changes from $(D master)</span>)

changelog/update_nav.sh

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,38 +27,3 @@ for ver in "${all_vers[@]}"; do
2727
prec_rel=$ver
2828
fi
2929
done
30-
31-
# update VER=2.012.3 macros
32-
for ver in "${all_vers[@]}"; do
33-
if [[ "$ver" = *_pre.dd ]]; then
34-
sed -i "s|VER=[0-9\.][0-9\.]*|VER=${ver%_pre.dd}|" "$ver"
35-
else
36-
sed -i "s|VER=[0-9\.][0-9\.]*|VER=${ver%.dd}|" "$ver"
37-
fi
38-
done
39-
40-
# reverse sort versions array, http://stackoverflow.com/a/11789688/2371032
41-
IFS=$'\n'
42-
rev_all_vers=($(sort --reverse <<<"${all_vers[*]}"))
43-
rev_rel_vers=($(sort --reverse <<<"${rel_vers[*]}"))
44-
rev_pre_vers=($(sort --reverse <<<"${pre_vers[*]}"))
45-
unset IFS
46-
47-
# update index of all changlogs
48-
sed -i '/BEGIN_GENERATED_CHANGELOG_VERSIONS/,/END_GENERATED_CHANGELOG_VERSIONS/d' changelog.ddoc
49-
echo '_=BEGIN_GENERATED_CHANGELOG_VERSIONS' >> changelog.ddoc
50-
echo 'CHANGELOG_VERSIONS =' >> changelog.ddoc
51-
echo ' $(CHANGELOG_VERSION_NIGHTLY)' >> changelog.ddoc
52-
for ver in "${rev_pre_vers[@]}"; do
53-
echo " \$(CHANGELOG_VERSION_PRE ${ver%_pre.dd}, not yet released)" >> changelog.ddoc
54-
done
55-
for ver in "${rev_rel_vers[@]}"; do
56-
echo " \$(CHANGELOG_VERSION ${ver%.dd})" >> changelog.ddoc
57-
done
58-
echo '_=END_GENERATED_CHANGELOG_VERSIONS' >> changelog.ddoc
59-
60-
# add release dates
61-
(
62-
IFS=$'\n'
63-
sed -i changelog.ddoc $(grep '(VERSION' -- *.dd | sed -E 's/^(.*)\.dd:\$\(VERSION (.*), ==.*/-e\ns#CHANGELOG_VERSION \1)#CHANGELOG_VERSION \1, \2)#/')
64-
)

ddoc_preprocessor.d

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ struct Config
2222
{
2323
string dmdBinPath = "dmd";
2424
string outputFile;
25+
string cwd = __FILE_FULL_PATH__.dirName;
2526
}
2627
Config config;
2728

@@ -51,6 +52,7 @@ All unknown options are passed to the compiler.
5152
// transform and extend the ddoc page
5253
text = genGrammar(text);
5354
text = genHeader(text);
55+
text = genChangelogVersion(inputFile, text);
5456

5557
// inject custom, "dynamic" macros
5658
text ~= "\nSRC_FILENAME=%s\n".format(inputFile.buildNormalizedPath);
@@ -201,8 +203,8 @@ auto specTocEntries()
201203
alias Entry = Tuple!(string, "name", string, "title", string, "fileName");
202204
Entry[] entries;
203205

204-
static immutable specDir = __FILE_FULL_PATH__.dirName.buildNormalizedPath("spec");
205-
static immutable mainFile = specDir.buildPath("./spec.ddoc");
206+
immutable specDir = config.cwd.buildNormalizedPath("spec");
207+
immutable mainFile = specDir.buildPath("./spec.ddoc");
206208

207209
auto specText = mainFile.readText;
208210
if (!specText.findSkip("SUBMENU2"))
@@ -253,3 +255,25 @@ auto genGrammar(string fileText)
253255
return fileText;
254256
}
255257

258+
// Automatically generate a versions overview
259+
auto genChangelogVersion(string fileName, string fileText)
260+
{
261+
import std.regex;
262+
static re = regex(`^[0-9]\.[0-9][0-9][0-9](\.[0-9])?(_pre)?\.dd$`);
263+
if (fileName.dirName.baseName == "changelog")
264+
{
265+
string macros = "\nCHANGELOG_VERSIONS=";
266+
macros ~= "$(CHANGELOG_VERSION_NIGHTLY)\n";
267+
auto changelogFiles = dirEntries(fileName.dirName, SpanMode.depth).filter!(a => !a.name.baseName.matchFirst(re).empty).array;
268+
changelogFiles.sort;
269+
foreach (file; changelogFiles.retro)
270+
{
271+
auto arr = file.readText.findSplitAfter("$(VERSION ")[1].until!(a => a.among('\n', '=')).array;
272+
auto date = arr.retro.findSplitAfter(",")[1].retro;
273+
auto ver = file.name.baseName.stripExtension.until("_pre");
274+
macros ~= "$(CHANGELOG_VERSION%s %s, %s)\n".format(file.name.endsWith("_pre.dd") ? "_PRE" : "", ver, date);
275+
}
276+
fileText ~= macros;
277+
}
278+
return fileText;
279+
}

posix.mak

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -458,14 +458,14 @@ dautotest: all verbatim pdf diffable-intermediaries
458458
# NOTE: Depending on the version of make, order matters here. Therefore, put
459459
# sub-directories before their parents.
460460

461-
$W/changelog/%.html : changelog/%_pre.dd $(CHANGELOG_PRE_DDOC) $(DMD)
462-
$(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_PRE_DDOC) $<
461+
$W/changelog/%.html : changelog/%_pre.dd $(CHANGELOG_PRE_DDOC) $(DDOC_BIN) | $(DMD)
462+
$(DDOC_BIN) -conf= -c -o- -Df$@ $(CHANGELOG_PRE_DDOC) $<
463463

464-
$W/changelog/pending.html : changelog/pending.dd $(CHANGELOG_PENDING_DDOC) $(DMD)
465-
$(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_PENDING_DDOC) $<
464+
$W/changelog/pending.html : changelog/pending.dd $(CHANGELOG_PENDING_DDOC) $(DDOC_BIN) | $(DMD)
465+
$(DDOC_BIN) -conf= -c -o- -Df$@ $(CHANGELOG_PENDING_DDOC) $<
466466

467-
$W/changelog/%.html : changelog/%.dd $(CHANGELOG_DDOC) $(DMD)
468-
$(DMD) -conf= -c -o- -Df$@ $(CHANGELOG_DDOC) $<
467+
$W/changelog/%.html : changelog/%.dd $(CHANGELOG_DDOC) $(DDOC_BIN) | $(DMD)
468+
$(DDOC_BIN) -conf= -c -o- -Df$@ $(CHANGELOG_DDOC) $<
469469

470470
$W/spec/%.html : spec/%.dd $(SPEC_DDOC) $(DMD) $(DDOC_BIN)
471471
$(DDOC_BIN) --compiler=$(DMD) -Df$@ $(SPEC_DDOC) $<

0 commit comments

Comments
 (0)