Ticket #1677: config.diff

File config.diff, 5.3 KB (added by zzz, 4 years ago)

prelim. patch for review

  • core/java/src/net/i2p/data/DataHelper.java

    #
    # old_revision [a1615974d5a7f1a401e0539785f6bb9422c3f0c1]
    #
    # patch "core/java/src/net/i2p/data/DataHelper.java"
    #  from [6ca531ec8ae27c726029ada48f8f2dbbdddba2c3]
    #    to [99de21498a1ad29ab3f060ff1730772d37f52934]
    # 
    # patch "router/java/src/net/i2p/router/Router.java"
    #  from [7fbf6ec74d9125ab222d1d84721eabf62df5f927]
    #    to [fad86b7df786e9dce05eb455b48ccebf4c887175]
    #
    ============================================================
    public class DataHelper { 
    492492     *                                  or a value contains '#' or '\n'
    493493     */
    494494    public static void storeProps(Properties props, File file) throws IOException {
     495        storeProps(props, file, null);
     496    }
     497   
     498    /**
     499     * Writes the props to the file, unsorted (unless props is an OrderedProperties)
     500     * Note that this does not escape the \r or \n that are unescaped in loadProps() above.
     501     * As of 0.8.1, file will be mode 600.
     502     *
     503     * Properties from the defaults table of props (if any) are not written out by this method.
     504     *
     505     * Leading or trailing whitespace in values is not checked but
     506     * will be trimmed by loadProps()
     507     *
     508     * @param help may be null
     509     * @throws IllegalArgumentException if a key contains any of "#=\n" or starts with ';',
     510     *                                  or a value contains '#' or '\n'
     511     * @since 0.9.27
     512     */
     513    public static void storeProps(final Properties props, final File file, final Properties helpMap) throws IOException {
    495514        PrintWriter out = null;
    496515        IllegalArgumentException iae = null;
    497516        File tmpFile = new File(file.getPath() + ".tmp");
    public class DataHelper { 
    514533                                                           name + "\" = \"" + val + '\"');
    515534                    continue;
    516535                }
     536                if (helpMap != null) {
     537                    String help = (String) helpMap.remove(name);
     538                    out.println("#");
     539                    if (help != null) {
     540                        while (true) {
     541                            out.print("# ");
     542                            int nl = help.indexOf("\\n");
     543                            if (nl < 0) {
     544                                out.println(help);
     545                                break;
     546                            }
     547                            out.println(help.substring(0, nl));
     548                            help = help.substring(nl + 2);
     549                        }
     550                    } else {
     551                        out.println("# No help is available for option: " + name);
     552                    }
     553                    out.println("#");
     554                }
    517555                out.println(name + "=" + val);
    518556            }
     557            // now print the default help entries
     558            if (helpMap != null && !helpMap.isEmpty()) {
     559                out.println("#");
     560                out.println("# ====================================");
     561                out.println("# Help for unset configuration options");
     562                out.println("# ====================================");
     563                for (Map.Entry<Object, Object> entry : helpMap.entrySet()) {
     564                    String name = (String) entry.getKey();
     565                    String help = (String) entry.getValue();
     566                    out.println("#");
     567                    while (true) {
     568                        out.print("# ");
     569                        int nl = help.indexOf("\\n");
     570                        if (nl < 0) {
     571                            out.println(help);
     572                            break;
     573                        }
     574                        out.println(help.substring(0, nl));
     575                        help = help.substring(nl + 2);
     576                    }
     577                    out.println("# " + name + '=');
     578                    out.println("#");
     579                }
     580            }
    519581            out.flush();
    520582            fos.getFD().sync();
    521583            out.close();
  • router/java/src/net/i2p/router/Router.java

    ============================================================
    public class Router implements RouterClo 
    14181418     * Synchronized with file read in getConfig()
    14191419     */
    14201420    public boolean saveConfig() {
     1421        Properties help = new OrderedProperties();
    14211422        try {
     1423            DataHelper.loadProps(help, new File(_context.getBaseDir(), "router.help.config"));
     1424        } catch (IOException ioe) {
     1425            // warning, _log will be null when called from constructor
     1426            if (_log != null && _log.shouldWarn())
     1427                _log.warn("Error loading config help", ioe);
     1428        }
     1429        try {
    14221430            Properties ordered = new OrderedProperties();
    14231431            synchronized(_configFileLock) {
    14241432                ordered.putAll(_config);
    1425                 DataHelper.storeProps(ordered, new File(_configFilename));
     1433                DataHelper.storeProps(ordered, new File(_configFilename), help);
    14261434            }
    14271435        } catch (IOException ioe) {
    14281436                // warning, _log will be null when called from constructor