Perforce QAC QA·CLI Changes in 2025.3

Pre-processed source (.i) is now automatically generated when assembling support analytics archive

  • Command: qacli analyze ‑a | ‑‑assemble‑support‑analytics
  • Old Behavior: For the archive to include pre-processed source the additional option ‑g|‑‑generate‑preprocessed‑source had to be explicitly specified. This forced pre-processed source generation for all files processed during analysis.
  • New Behavior: When this option is specified and a file fails analysis (and the ‑g flag is NOT set), it will re-analyze the file, this time including pre-processed source output. There is obviously no need to re-analyze if -g flag is set. The .arc, .via and .i are then zipped up.

Duplicates are now removed from collated outputs

  • Command: qacli view ‑‑collate‑output | ‑c
  • Old Behavior: When outputting results, rather than mirror the directory structure of the source code tree, collate all output into a single directory.
  • New Behavior: The output is now produced into sub-directories whose name is derived from the parent directory and a hash of the path (eg “src-956e645e4e0591b2cafa“). This allows us to ensure there are no duplicate files in a directory whilst minimizing the path length.

Output directory path sizes can now be minimized

  • Command: All
  • Old Behavior: The output directory hierarchy is mirrored from the source directory hierarchy. For Windows systems, which are limited to 260 characters by default this could cause a failure during analysis.
  • New Behavior: A new environment variable has been introduced, QAC_MIN_OUTPUT_DIR, which if set, will flatten the directory hierarchy and reduce the chances of breaching the 260 char limit.

CCTs can now be generated even if qainject fails

  • Command: qacli sync ‑‑type INJECT ‑‑generate‑cct ‑‑force|‑f
  • Old Behavior: If qainject failed during a synchronisation then no CCT was generated.
  • New Behavior: If the ‑‑force|‑f option is specified and the INJECT synchronisation fails then the CCTs will be created - assuming enough information is available.

Redundant path decorators are now automatically removed

  • Command: qacli project roots ‑‑path <path>
  • Old Behavior: Paths were added verbatim.
  • New Behavior: Paths are now canonical and any trailing path separators are removed (eg C:\foo\. becomes C:\foo)

Explicit encoding can now be specified for Validate build and cibuild commands

  • Command: qacli validate build | cibuild ‑‑encoding|‑E <encoding type>
  • Old Behavior: Not available. No explicit encoding could be set.
  • New Behavior: Explicit encoding can now be specified for these commands.

Fixed issue where project roots were not respected

  • Command: project roots -P <dir> ‑A SOURCE_ROOT ‑‑path <path>
  • Old Behavior: Roots that were added to the prqa/qa-framework-app.xml file (i.e. without the ‑‑force option) and later referenced in the prqaproject.xml were not respected.
  • New Behavior: The file prqa/qa-framework-app.xml is now read before the prqaproject.xml file and any local roots in that file will be respected.

qacli now returns an error if an invalid sub-command is specified

  • Command: qacli validate XXX | qacli config XXX | qacli project XXX
  • Old Behavior: For qacli commands with sub-commands (validate, config, and project), if an invalid sub-command was specified it would be accepted, do nothing and return 0 (success).
  • New Behavior: If an invalid sub-command is specified then an error will be reported and return 1 (CLI Parse Failure).