public void updateReleases()

in src/main/java/org/apache/sling/cli/impl/jbake/JBakeContentUpdater.java [63:125]


    public void updateReleases(Path releasesPath, String releaseName, String releaseVersion, LocalDateTime releaseTime) throws IOException {
        
        List<String> releasesLines = Files.readAllLines(releasesPath, StandardCharsets.UTF_8);
        String dateHeader = "## " + releaseTime.format(DateTimeFormatter.ofPattern("MMMM uuuu", Locale.ENGLISH));
        
        int releaseLineIdx = -1;
        int dateLineIdx = -1;
        for ( int i = 0 ; i < releasesLines.size(); i++ ) {
            String releasesLine = releasesLines.get(i);
            if ( releasesLine.startsWith("This is a list of all our releases") ) {
                releaseLineIdx = i;
            }
            if ( releasesLine.equals(dateHeader) ) {
                dateLineIdx = i;
            }
        }
        
        if ( dateLineIdx == -1 ) {
            // need to add month marker
            releasesLines.add(releaseLineIdx + 1, "");
            releasesLines.add(releaseLineIdx + 2, dateHeader);
            releasesLines.add(releaseLineIdx + 3, "");
            dateLineIdx = releaseLineIdx + 2;
        }
        
        String date = formattedDay(releaseTime);
        
        // inspect all lines in the current month ( until empty line found )
        // to see if the release date already exists
        boolean changed = false;
        for ( int i = dateLineIdx +2 ; i < releasesLines.size(); i++ ) {
            String potentialLine = releasesLines.get(i);
            if ( potentialLine.trim().isEmpty() )
                break;
            
            if ( potentialLine.endsWith("(" +date+")") ) {
                if ( potentialLine.contains(releaseName + " " + releaseVersion ) ) {
                    changed = true;
                    break;
                }
                
                int insertionIdx = potentialLine.indexOf('(') - 1;
                StringBuilder buffer = new StringBuilder();
                buffer
                    .append(potentialLine.substring(0, insertionIdx))
                    .append(", ")
                    .append(releaseName)
                    .append(' ')
                    .append(releaseVersion)
                    .append(' ')
                    .append(potentialLine.substring(insertionIdx + 1));
                
                releasesLines.set(i, buffer.toString());
                changed = true;
                break;
            }
        }
        
        if ( !changed )
            releasesLines.add(dateLineIdx + 2, "* " + releaseName + " " + releaseVersion +" (" + date + ")");

        Files.write(releasesPath, releasesLines);
    }