Unity-Technologies / Unity-Technologies/UnityDataTools

analyze truncates an existing -o database when the input matches no files

Aperta Adatta ai principianti
#138 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
C#
Stelle
821
Fork
71
Merge medio
3h 13m
PR unite (30g)
9

Descrizione

When the input paths match no files at all, analyze still creates the output database before
discovering there is nothing to do. SQLiteWriter.Begin truncates the file (File.WriteAllBytes)
and runs the full schema init, the run then finds zero files, and the (now empty) database is
deleted.

The destructive part is the truncation. A mistyped path is enough:

UnityDataTool analyze C:/typo/not-a-real-path -o important.db

important.db is a previous, valid analysis. The command prints
Warning: path not found, skipping: C:/typo/not-a-real-path, truncates important.db anyway, and
(since #115) deletes it. The old content is gone either way — this behaviour predates #115, which
only changed what is left behind afterwards.

Nothing needs to touch the filesystem in this case. A check before the database is created, e.g.
after CollectFiles() in AnalyzerTool.Analyze:

if (files.Count == 0)
{
    Console.Error.WriteLine("Error: the input paths matched no files to analyze.");
    return 1;
}

avoids creating or truncating anything, and skips the schema init and finalize work that is
currently thrown away.

Points to decide:

  • This introduces a second "nothing was analyzed" message alongside the one added in #115. They
    could share wording.
  • It also makes an existing database at -o survive this class of failure, while a run where every
    file failed still deletes it. That difference is defensible (the file is only removed once its
    content has already been destroyed) but it should be a deliberate choice.

Found while reviewing the fix for #115; left out of that PR to keep it to a single failure path.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia in AnalyzerTool.Analyze, nel punto successivo a CollectFiles(), e verifica come il percorso senza file raggiunga attualmente la creazione e la finalizzazione del database. Aggiungi lì la gestione dell’assenza di file, decidi se condividere la formulazione con il messaggio di #115 e verifica che un database esistente indicato con -o non venga creato né troncato quando nessun file di input corrisponde.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp, sqlite
Ambito
cli, database
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
75/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.