{"id":18974542,"url":"https://github.com/m7a/bo-dirstat","last_synced_at":"2026-04-08T15:30:20.584Z","repository":{"id":164554566,"uuid":"227861126","full_name":"m7a/bo-dirstat","owner":"m7a","description":"Tools to analyze filesystem hierarchies","archived":false,"fork":false,"pushed_at":"2024-04-28T19:30:02.000Z","size":240,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-01T09:08:17.654Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m7a.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-13T14:48:14.000Z","updated_at":"2024-04-28T19:30:06.000Z","dependencies_parsed_at":"2024-04-28T20:31:04.517Z","dependency_job_id":"9fe5114d-1d0b-4ea8-b2d7-71a05b3f23ff","html_url":"https://github.com/m7a/bo-dirstat","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fbo-dirstat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fbo-dirstat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fbo-dirstat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m7a%2Fbo-dirstat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m7a","download_url":"https://codeload.github.com/m7a/bo-dirstat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239972109,"owners_count":19727307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T15:15:23.480Z","updated_at":"2026-04-08T15:30:20.516Z","avatar_url":"https://github.com/m7a.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nsection: 32\nx-masysma-name: dirstat\ntitle: Ma_Sys.ma DirStat 1 und 2\ndate: 2019/12/06 13:16:32\nlang: en-US\nauthor: [\"Linux-Fan, Ma_Sys.ma (Ma_Sys.ma@web.de)\"]\nkeywords: [\"dirstat2\", \"DirStat\", \"Dir\", \"Stat\", \"scan\"]\nx-masysma-version: 2.0.0\nx-masysma-repository: https://www.github.com/m7a/bo-dirstat\nx-masysma-website: https://masysma.net/32/dirstat.xhtml\nx-masysma-owned: 1\nx-masysma-copyright: |\n  Copyright (c) 2014, 2019 Ma_Sys.ma.\n  For further info send an e-mail to Ma_Sys.ma@web.de.\n---\nSummary\n=======\n\nDirStat 2 allows the state of a filesystem hierarchy to be recorded in a\nPostgreSQL database and includes a GUI to connect to this database in order\nto perform analyses in terms of file types and file sizes.\n\nThis package includes DirStat 1 which provides a subset of the functionality\n(a fixed analysis) in a less stable but still useful commandline application\nwithout the need to acquire data into a database first.\n\nDirStat 1 Description (in German)\n=================================\n\nMit DirStat konnte man statistische Informationen über die in einem Ordner\nenthaltenen Dateien anfertigen. Dabei zeigte das Programm auch Statistiken\nnach Dateitypen an. Mit einer komplexen Einstellungsdatei ließen sich alle\nDateitypen einstellen, sowie festlegen, welche Statistiken für diese\nTypen und für die Gesamtauswertung angezeigt werden sollten. Als Nebenfunktion\nkonnte das Programm auch versuchen den Dateityp einer angegebenen Datei zu\nermitteln. Dies war allerdings wegen des aufwändigen Ladevorgangs der Datenbank\nnicht für allzu häufige Abfragen geeignet. DirStat konnte auch Informationen wie\ndie Anzahl leerer Dateien ermitteln, die sich eignen, um ein (vermülltes)\nVerzeichnis zu finden und aufzuräumen.\n\nDas Programm war nicht ganz fertig, es fehlte noch ein Abbruchsmechanismus\nund eine Funktion die es ermöglichen sollte, ein zu einer Datei passendes\nProgramm zu öffnen. Zusätzlich musste das Programm noch hinsichtlich der\nGeschwindikeit optimiert werden. Trotz der Unfertigkeit war das Programm\nschon Praxistauglich -- die wichtigsten Funktionen arbeiteten schon korrekt.\n\nDie beiliegende Konfigurationsdatei zeigte eine sehr ausführliche Statistik und\nwar (wie auch der Rest des Programmes) noch nicht ganz fertig.\n\nBeispiel für eine (sehr einfache) Konfigurationsdatei, die nur die\nGesamtstatistik anzeigt und alle anderen Dateien außer `.exe` Dateien\nals unbekannt meldet:\n\n~~~{.xml}\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?\u003e\n\u003c!--\n\tMa_Sys.ma Dir Stat Configuration File, Copyright (c) 2011 Ma_Sys.ma.\n\tFor further info send an e-mail to Ma_Sys.ma@web.de\n--\u003e\n\u003c!DOCTYPE stats [\n\u003c!ELEMENT stats (type, format+)\u003e\n\u003c!ATTLIST stats version CDATA #FIXED \"1.0\"\u003e\n\u003c!ELEMENT type (type)*\u003e\n\u003c!ATTLIST type title CDATA #REQUIRED\u003e\n\u003c!ATTLIST type pattern CDATA #IMPLIED\u003e\n\u003c!ATTLIST type sort (category|extension|extension-regex|regex|name) \"extension\"\u003e\n\u003c!ATTLIST type emr (true|false) \"false\"\u003e\n\u003c!ATTLIST type stats (end|big|small|sub) \"sub\"\u003e\n\u003c!ELEMENT format (format)*\u003e\n\u003c!ATTLIST format title CDATA #IMPLIED\u003e\n\u003c!ATTLIST format data CDATA #IMPLIED\u003e\n\u003c!ATTLIST format value (title|hidden|executable|unreadable|readonly|unreadable-dirs|zero-byte|non-files|folders|files-between|max-depth|biggest-folder-size|biggest-folder-files|biggest-file|doubles|size|files|time|link-traps|avg-files-per-dir|avg-file-size|avg-speed-files-per-second|avg-speed-MiB-per-second) \"title\"\u003e\n\u003c!ATTLIST format describes (end|big|small|sub) \"sub\"\u003e\n]\u003e\n\n\u003cstats\u003e\n\t\u003ctype title=\"all\" stats=\"end\" sort=\"category\"\u003e\n\t\t\u003ctype title=\"Windows Programm\" pattern=\"exe\" /\u003e\n\t\u003c/type\u003e\n\t\u003cformat describes=\"big\"\u003e\n\t\t\u003cformat title=\"Dateien\" value=\"files\" /\u003e\n\t\u003c/format\u003e\n\t\u003cformat describes=\"sub\"\u003e\n\t\t\u003cformat title=\"Dateien\"   value=\"files\" /\u003e\n\t\t\u003cformat title=\"Groesse\"   value=\"size\" /\u003e\n\t\u003c/format\u003e\n\t\u003cformat describes=\"end\"\u003e\n\t\t\u003cformat title=\"Dateien\"           value=\"files\" /\u003e\n\t\t\u003cformat title=\"Ordner\"            value=\"folders\" /\u003e\n\t\t\u003cformat title=\"Groesse\"           value=\"size\" /\u003e\n\t\t\u003cformat title=\"Versteckt\"         value=\"hidden\" /\u003e\n\t\t\u003cformat title=\"Aufuehrbar\"        value=\"executable\" /\u003e\n\t\t\u003cformat title=\"Unlesbar\"          value=\"unreadable\" /\u003e\n\t\t\u003cformat title=\"Schreibgeschuetzt\" value=\"readonly\" /\u003e\n\t\t\u003cformat title=\"Groesste Datei\"    value=\"biggest-file\" /\u003e\n\t\t\u003cformat title=\"Leere Dateien\"     value=\"zero-byte\" /\u003e\n\t\u003c/format\u003e\n\u003c/stats\u003e\n~~~\n\nEin Aufruf von DirStat mit dieser Konfigurationsdatei über den gesamten\nMa_Sys.ma Datenbestand gab folgende Ausgabe (unbekannte Dateitypen wurden\ngekürzt):\n\n\tMa_Sys.ma Dir Stat, Copyright (c) 2011 Ma_Sys.ma.\n\tFor further info send an e-mail to Ma_Sys.ma@web.de.\n\t\n\tParsing XML Configuration from conf.xml...\n\tParsing complete.\n\t\n\tCreating statistics for /data...\n\tscan() 1, (1/s), 87 MiB free\n\tscan() 39076, (39075/s), 123 MiB free\n\tProgressed 70189 scans, 81 MiB free\n\t\n\tall\n\t  Windows Programm     e=exe              Dateien=53    Größe=465.99 MiB\n\t  Unknown Type\n\t    *.gz               e=gz               Dateien=58    Größe=38.89 MiB\n\t     ... Aus Platzgründen wurde der Rest der Liste ausgelassen ...\n\t    *.sa4              e=sa4              Dateien=3     Größe=0.45 MiB\n\t  Dateien              63786\n\t  Unknown Type Without Extension\n\t  Dateien              2194\n\tDateien                66033\n\tOrdner                 4155\n\tGröße                  19052.55 MiB\n\tVersteckt              181\n\tAuführbar              63965\n\tUnlesbar               0\n\tSchreibgeschützt       44021\n\tGrößte Datei           4290.06 MiB\n\tLeere Dateien          168\n\nObwohl DirStat 1 nie fertig wurde, wurde eine zweite Version DirStat 2\ngeschrieben, die auch erfolgreich fertiggestellt wurde.\n\nDirStat 2\n=========\n\n## Introduction\n\nDirStat 2 is a powerful tool to analyze directory structures. If you encounter\na HDD filled with many files, folders and subfolders you might want to know\nwhich files are the largest, which file types take up the most space, which user\nnames the files belong to or other questions which you can not answer directly\nusing the utilities provided by the platform especially on Windows systems.\n\nOn Linux you could write scripts for that purpose but filenames can be very\ntroublesome in scripts and listing all that information neatly will require\na complex set of scripts still inferior to DirStat 2.\n\nDirStat 2 tries to address these questions: You can scan a directory structure\n(refer to _Scanning_) and analyze it later -- even on a separate system if\nyou prefer your known working environment. The file metadata is stored in a\nPostgreSQL database which allows the user to make arbitrary queries to get\nwhichever information is required. The DirStat 2 GUI (see _Evaluation_)\npresents important information at one sight and can be extended via user-written\nJavaScripts to allow very specific views on the data.\n\n## Credits\n\nThis program uses PostgreSQL's Java Driver and includes Netbeans' _Outline_\ncomponent in file `dirstat2/lib/org-netbeans-swing-outline.jar`. See\n`dirstat2/lib/cddl.txt` for license details.\n\n## Quickstart with Docker\n\nAssuming you do not want to install neither PostgreSQL nor DirStat, it is also\npossible to run it portably by means of PostgreSQL's docker image:\n\n 1. Compile DirStat 2 by issuing `ant jar`\n 2. Start database (non-persistently) with Docker\n    `docker run -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD=testwort -e POSTGRES_USER=linux-fan -e POSTGRES_DB=masysma_dirstat --rm -it postgres:12`\n 3. Perform a scan\n    `java -cp /usr/share/java/postgresql.jar:./dirstat2.jar ma.dirstat.Main --scan --db=INSECURE:linux-fan:testwort@127.0.0.1:5432 --name=scan1 --src=/data/main/mdvl`\n 4. View scan in GUI\n    `java -cp /usr/share/java/postgresql.jar:lib/org-netbeans-swing-outline.jar:./dirstat2.jar ma.dirstat.Main --eval --db=INSECURE:linux-fan:testwort@127.0.0.1:5432 --name=scan1`\n 5. _perform data-analysis here_\n 6. Exit GUI and Container to clean up all data,\n    call `ant dist-clean` to reset repository to initial state.\n\nNote that this _INSECURE_ here is not so insecure as the database is on the\nlocal machine. So as long as you are the only user, this invocation is safe to\nuse.\n\n## Prerequisites and Setup\n\nDepending on your situation/location/system you will want to choose different\nways of installing PostgreSQL. A reliable way is to install the package provided\nby your favorite linux distribution or use the normal Windows setup. If you are\non a foreign system and do not run the database on an analysis system (probably\nbecause there is no separate system available for analysis) you might want to go\nfor the PostgreSQL portable package\n\u003chttp://sourceforge.net/projects/postgresqlportable/\u003e.\n\nDepending on your installation you will need to create an username and password\nbut regardless of how you installed PostgreSQL you will need to create the\ndatabase manually as described in _PostgreSQL Setup_.\n\nWhen run for the first time, DirStat 2 will automatically create tables and\nindices as necessary. To clear all tables (but not delete the database itself)\nthe script `drop.sql` is provided for convenience. You can run it via\n\n\t$ psql masysma_dirstat\n\tmasysma_dirstat=\u003e \\i drop.sql\n\nYou might need to enter the whole path to `drop.sql`. At that interactive shell\nyou can always perform queries ad-hoc without writing your own script and\nwithout using the GUI. To find out which attributes and tables are defined,\nextract `ma/dirstat/init.sql` from your DirStat 2 JAR file.\n\nIf you want to clear all traces of DirStat 2's database from your system, use\nthe described commands after the drop described above.\n\n\t# su postgres\n\t$ psql\n\tDROP DATABASE masysma_dirstat;\n\tDROP ROLE \"linux-fan\";\n\t\\q\n\texit\n\n## PostgreSQL Setup\n\nFollow \u003chttp://www.cyberciti.biz/faq/howto-add-postgresql-user-account/\u003e\nand \u003chttp://www.postgresql.org/docs/9.3/static/sql-createrole.html\u003e\n\n\t# su postgres\n\t$ psql\n\tCREATE ROLE \"linux-fan\" WITH LOGIN PASSWORD 'testwort';\n\tCREATE DATABASE masysma_dirstat;\n\tGRANT ALL PRIVILEGES ON DATABASE masysma_dirstat TO \"linux-fan\";\n\t\\q\n\texit\n\nOn Windows systems, you can get the _SQL Shell (psql)_ from the GUI menu.\n\nAlso, you might chose arbitrary usernames and passwords to suit your needs but\nthe database name `masysma_dirstat` is fixed (unless you recompile DirStat 2).\n\n## Scanning\n\nIf you intend to only perform one scan with standard settings you can enter\n\n\t$ java -jar dirstat2.jar --scan --db=user:password@host\n\nThis will scan all devices (on Windows) and the system root on Unix or Linux.\nIf you want to scan a specific directory you can alter the command this way:\n\n\t$ java -jar dirstat2.jar --scan --db=user:password@host --src=/etc\n\nIf you want to give the scan a name (the default value is of course `default`),\nyou can add a suitable parameter:\n\n\t$ java -jar dirstat2.jar --scan --db=user:password@host --name=linux1\n\nNames must be unique for one database. The DB parameter contains the PostgreSQL\nuser, password and host (and optional port) which the server is running on.\n\nWhile the scan is running, you will be presented status information, see\n_Scan status_ for details. Further options for additional metadata to scan\nare available via\n\n\t$ java -jar dirstat2.jar --help\n\nIf you want to disable TLS, you can prepend `INSECURE:` to your login data.\nThis is often necessary for Windows systems.\n\n## Evaluation\n\nTo open the GUI for evaluation you can use the following command:\n\n\t$ java -jar dirstat2.jar --eval --db=user:password@host --name=linux1\n\nThis will open the scan named `linux1` in the GUI. Multiple GUI instances can\nview the same dataset (there is a real database behind after all) and it is\npossible to have another scan (with a different name) running while the GUI is\nopen. It is not recommended to view the data you are currently scanning because\nit might be temporarily inconsistent (this is not a database issue but a design\nchoice of the scanning facility to maximize scanning performace).\n\nThe GUI should look like in the following pseudo-graphic\n\n\t/--[ DirStat 2 ]------------------------------------------[ _ [] X ]--\\\n\t| Path          Pattern  Files  Size  Errors  Empty  Biggest etc.     |\n\t|.....................................................................|\n\t| linux1                                                              |\n\t|   Extensions  *.*      4096   10M   5       10     1M               |\n\t|     txt       *.txt    600     2M   0        2     64K              |\n\t|   FS Tree     /        4096   10M   5       10     1M               |\n\t|     /test     scanp    2048    5M   0        2     512K             |\n\t|     etc.                                                            |\n\t+----------------------+---------------------+------------------------+\n\t| General Information  | Empty files         | File Size Distribution |\n\t| .................... | ................... | ...................... |\n\t| . Key     . Value  . | . /test/empty.txt . | .                    . |\n\t| .................... | . /test/emty.txt  . | .          *         . |\n\t| . Objects . 5000   . | . /test/.empx.txt . | .   *      **        . |\n\t| . etc.    . etc.   . | . /test/.testrc   . | .  **     ****  *    . |\n\t| .................... | ................... | ...................... |\n\t\\----------------------+----------------------------------------------/\n\nAs you can see it is divieded into four parts. The first and main part displays\nthe so-called _view_ which can be a file system structure or a view ordered\nby file extension or such. The views are displayed at the top of the frame. The\nthree other parts are a table of general information, a list of empty files and\na diagram about the file size distribution whose x-Axis is logarithmic to allow\nthe user to view large filesizes (like 1\\ TiB) and small file sizes (like\n4\\,KiB) in one diagram. The three lower parts always refer to the entry you have\nselected in a view in the top panel.\n\nTo make advanced use of the views, you can attach a new view below an existing\none. It will not be displayed “below” in the tree structure but only contain\ncontents which occur below the node they were attached to. To view the file\nsystem structure of all `.txt`-files you might want to select the entry _txt_\nin the ``Extensions''-view and use the context menu to attach a new\n_Default/tree.js_ view. The view will show you a subset of the scan in\nhierarchical tree form (like in the real filesystem) but it will only contain\nfiles and folders which are (or contain) `.txt`-files. Similarily, you can\nattach a _Default/extension.js_ view below a node from the _FS Tree_ to\nview the filetypes below a specific directory.\n\nTo get more advanced and special information about the scan, you can also\nwrite your own views in JavaScript and attach them below other views or just add\nthem to the GUI by attaching them below the scan name (here: `linux1`). The\nAPI for writing your own view is documented in the section _Writing your own\nview_ below.\n\n## Scan status\n\nDuring the scan, DirStat 2 will print status lines about errors and the\nscan progress. As there is only one scan pass, DirStat 2 does not know how far\nit already is -- there is no “real” progress indicator. From the amount of\ndata scanned (which you can compare roughly to your HDD fill level if you are\nscanning the whole HDD) you can get an estimate.\n\nA normal status line will consist of key-value associations which contain\ninformation about the number (or size) of items scanned and a change from the\nlast status display which is marked with a `+`-sign.\n\nS  Symbol       Description\n-  -----------  ---------------------------------------------\nf  Files        The number of files scanned.\nd  Directories  The number of directories completely scanned.\ne  Errors       The number of errors occurred.\ns  Size         Summarized size of all entities scanned.\nc  Commited     The number of queries sent to the database.\nq  Queries      The total number of queries ``queued''.\n\nOn fast filesystems it is normal that the scan has already completed and the\ndata has not yet been committed to the database. Scanning a normal HDD for the\nfirst time it is likely that the filesystem scan time outweighs the database\ncommit time.\n\n## Writing your own view\n\nTo write your own view, create a JavaScript file with the following skeleton.\n\n~~~{.javascript}\nfunction MyView() { }\nMyView.prototype = new ViewJS();\nvar ref = MyView.prototype;\n\nref.root = null;\n\nref.create = function() {\n\tthis.root = this.createNode(null);\n\tthis.root.id = \"Extension\";\n\tthis.root.pattern = \"*.*\";\n}\n\nref.populateChildren = function(node) {\n\t// ...\n\tnode.setReady();\n}\n\nref.createFilter = function(node) {\n\treturn this.createDefaultFilter(\"files.ext = ?\",\n\t\t\t\t\t\t[ node.userdata ]);\n}\n\nfunction create_view() { return new MyView(); }\n~~~\n\nThese functions have been copied from `extension.js`. Your own filter will of\ncourse need a real name (although _MyView_ would also work) and an own\nimplementation of the methods. The Methods are defined as described below.\n\n`create`\n:   This function is invoked when your view is added. You should do basic\n    initialization here. If your view will not dynamically add new nodes\n    on demand but create them all at the beginning (like the Extension view\n    does) you should do the node creation here. At least the root node\n    should be created here.\n\n`populateChildren(node)`\n:   If your view dynamically creates the children on demand you implement\n    this method which is invoked if the children should be created. The node\n    parameter is either your root node or one of it's children. To mark that\n    this node's children are now available call `node.setReady()`.\n\n`createFilter(node)`\n:   This method is invoked if another view is to be attached below your view\n    or the secondary panels are to be updated for the node given as\n    parameter. `default.js` has a convenicence function\n    `createDefaultFilter` which allows you to write part of a prepared\n    `WHERE` statement and give the parameters as a JavaScript array.\n    This function returns the created filter as you can see in the skeleton.\n\n`create_view`\n:   This (not object oriented) function is invoked to create an object of\n    your view. It should normally not do anything beyond creating the\n    object as it might block the GUI. Do all initailization in `create`.\n\nAll views have to extend `ViewJS` which is implemented in `default.js`. To get\nan overview over the methods available, you should extract `default.js` from\nthe DirStat 2 JAR file and scan it for useful methods. For further information\nabout implementing a view feel free to extract `extension.js` and `tree.js` from\nthe JAR -- they both contain working views and show you how to use the functions\nyou find in `default.js`.\n\n## Querying the Database\n\nBecause of DirStat 2's filter concept, querying is rather difficult. Depending\non wether you want to query without a filter or using the filters the user of\nthe view might have imposed by attaching your view below another, you can use\ntwo different methods.\n\n`prepareQuery(query)`\n:   This method creates a query which ignores all filters. It just returns\n    a standard Java `PreparedStatement` with no filters enabled. You should\n    only use it if you know that the data you query is unique for the _whole\n    database_ (including possible other scans in the same database!).\n\n`prepareSelect(query)`\n:   This is the function you will more likely be using: It creates a query\n    and attaches suitable filters before all `WHERE` clauses. If you do not\n    have a `WHERE` clause yet, use `WHERE ?` to add a `WHERE` clause which\n    only applies the filters. To populate such a `PreparedStatement` you\n    need to invoke suitable `setString(...)` and similar methods to populate\n    the `?`s you have created except for `WHERE ?` and interleave them with\n    suitable calls to `appendFilterValues(query, pos)` to fill the implicit\n    filters and `WHERE ?` clauses. Check `extension.js` and `tree.js` for\n    examples.\n\nWarning\n:   As you will write a mixture of Java and JavaScript there can be a serious\n    trouble with `String` objects: Sometimes they behave like JavaScript Strings\n    and sometimes they behave like Java String objects. If you pass anything to\n    a filter or Query like with `query.setString(pos++, value)` make sure it is\n    a _Java_ String object and not a JavaScript String. Otherwise the\n    application might just hang at 0% CPU usage for no visible reason. Similar\n    issues occur when invoking nonexisting methods on objects.\n\n## Known Issues\n\nNo error dialog\n:   Error dialogs are a Tools 2.1 feature that has not yet been implemented.\n    Therefore, DirStat 2 only logs errors to the console.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Fbo-dirstat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm7a%2Fbo-dirstat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm7a%2Fbo-dirstat/lists"}