Skip to content

[#49] Improve analyze file specification, CLI help and docs improvements#76

Merged
SkowronskiAndrew merged 5 commits into
mainfrom
analyze-refactor
Jun 15, 2026
Merged

[#49] Improve analyze file specification, CLI help and docs improvements#76
SkowronskiAndrew merged 5 commits into
mainfrom
analyze-refactor

Conversation

@SkowronskiAndrew

@SkowronskiAndrew SkowronskiAndrew commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

Primarily fixes #49 (improve how analyze specifies input files), plus a couple of related CLI/help and refactor improvements that were on this branch.

analyze now takes multiple file or directory paths (#49)

The positional argument is now variadic — each path may be a file or a directory:

UnityDataTool analyze my.bundle                              # single file (no more ". -p my.bundle")
UnityDataTool analyze ./Build ./Library/LastBuild.buildreport   # build output + external build report
UnityDataTool analyze ./Build                               # unchanged
  • Directories are scanned (honoring --search-pattern / --no-recurse); explicitly named files are analyzed directly.
  • Multiple locations can be combined into one database in a single invocation (there is no way to append to an existing database).
  • AnalyzerTool.AnalyzeOptions.Paths replaces the single Path; a new CollectFiles() expands inputs, dedups, and tracks per-input roots for relative-path display.

CLI help improvements

  • Root --help now has a description, the documentation URL, and the version number (read from the assembly).
  • AnalyzerTool.Analyze refactored to take an options struct (matching TextDumperTool).

Documentation

  • command-analyze.md, analyzer.md: document the new multi-path usage.
  • buildreport.md: cross-referencing build output + report, and the Unity 6.6 build history workflow.
  • README.md: clarified the "Getting UnityFileSystemApi" section (bundled library normally needs no action; backward but not forward compatible; fixed copy path; hyperlinked the files).

Testing

  • Converted tests that used the awkward ". -p <file>" form to pass file paths directly.
  • Added coverage for the directory-plus-external-file case.
  • Full UnityDataTool.Tests suite passes (212 tests).

Fixes #49

Include link to the online documentation, this should help agents self-discovery.
Apply similar refactoring to other commands, helps scale as we add more options.
The analyze command now takes a variadic positional argument: each path
may be a file or a directory. Directories are scanned (honoring
--search-pattern/--no-recurse); explicitly named files are analyzed
directly. This makes analyzing a single file simple and lets files from
multiple locations (e.g. a build output directory plus an external build
report) go into one database in a single invocation.

- AnalyzerTool.AnalyzeOptions.Paths replaces the single Path; CollectFiles
  expands inputs, dedups, and tracks per-input roots for relative display.
- Convert tests that used the awkward ". -p <file>" form to pass paths
  directly; add coverage for the directory-plus-external-file case.
- Document the new usage in command-analyze.md, analyzer.md and
  buildreport.md (including the Unity 6.6 build history workflow).

Fixes #49
Lead with the fact that the bundled library normally needs no action,
state that it is backward but not forward compatible, fix the copy
destination path (UnityFileSystem/ at the repo root, not
UnityDataTool/UnityFileSystem/), and hyperlink the library files.
@SkowronskiAndrew SkowronskiAndrew requested a review from Copilot June 15, 2026 19:58
@SkowronskiAndrew SkowronskiAndrew changed the title [#49] Improve analyze file specification; CLI help and docs improvements [#49] Improve analyze file specification, CLI help and docs improvements Jun 15, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses issue #49 by improving how UnityDataTool analyze specifies input files/locations, enabling multi-path (files and/or directories) analysis in a single invocation, and updates CLI help and documentation accordingly.

Changes:

  • Update analyze CLI to accept one-or-more file/directory paths and pass them through an AnalyzeOptions struct to the analyzer.
  • Add file collection/expansion logic to deduplicate and track per-input roots for relative-path display.
  • Update tests and docs to reflect the new multi-path usage and improved help text.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
UnityDataTool/Program.cs Updates root help text and changes analyze to accept variadic paths and call the analyzer via AnalyzeOptions.
Analyzer/AnalyzerTool.cs Refactors analyze entry point to take an options object and adds multi-path file collection logic.
UnityDataTool.Tests/UnityDataToolPlayerDataTests.cs Updates tests to pass a file path directly instead of directory + -p filtering.
UnityDataTool.Tests/SerializedFileCommandTests.cs Updates analyze invocation in cross-validation test to use direct file input.
UnityDataTool.Tests/BuildReportTests.cs Updates build report tests for direct-file analyze and adds a new directory+external-file coverage test.
Documentation/command-analyze.md Documents new <paths>... usage and examples for single-file and multi-location analysis.
Documentation/buildreport.md Updates guidance for cross-referencing build output + build report and multi-report workflows (including Unity 6.6 build history).
Documentation/analyzer.md Updates library docs to reflect multi-path behavior.
README.md Clarifies UnityFileSystemApi usage and links bundled native libraries.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread UnityDataTool/Program.cs
Comment thread Analyzer/AnalyzerTool.cs
Comment thread Analyzer/AnalyzerTool.cs
Comment on lines +147 to +165
var searchOption = m_Options.NoRecursion ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories;
var collected = new List<(string FullPath, string DisplayRoot)>();
var seen = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

foreach (var inputPath in m_Options.Paths)
{
if (Directory.Exists(inputPath))
{
foreach (var file in Directory.GetFiles(inputPath, m_Options.SearchPattern, searchOption))
{
if (seen.Add(Path.GetFullPath(file)))
collected.Add((file, inputPath));
}
}
else if (File.Exists(inputPath))
{
if (seen.Add(Path.GetFullPath(inputPath)))
collected.Add((inputPath, Path.GetDirectoryName(Path.GetFullPath(inputPath))));
}
Comment thread Documentation/analyzer.md
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@SkowronskiAndrew SkowronskiAndrew merged commit 1ac7e19 into main Jun 15, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve the ability to specify files for analyze

2 participants