ClientProgress - progress indicators for Helix Core Server commands

The ClientProgress class introduced in 2012.2 provides a means to report on the progress of running commands; you can customize this behavior by subclassing ClientUser and ClientProgress.

In ClientUser, implement ClientUser::CreateProgress() and ClientUser::ProgressIndicator(). In ClientProgress, implement ClientProgress::Description(), ClientProgress::Total(), ClientProgress::Update(), and ClientProgress::Done()

The methods of your ClientProgress object will be called during the life of a server command. Usually, Description() is called first with a description and a units from the server; the units of measure apply to the Total() and Update() methods. Total() is called if a there is a known upper bound to the number of units, while Update() is called from time to time as progress is made. If your Update() implementation returns non-zero, the API assumes the user has also attempted to cancel the operation. Done() is called last, with the fail argument being non-zero in case of failure. When the command is complete, the API destroys the object by calling the destructor.

Default implementations are used in the p4 command-line client, and report on the progress of p4 -I submit and p4 -I sync -q.