mirror of
https://github.com/QRouland/UTPass.git
synced 2025-01-26 00:26:40 +00:00
112 lines
4.0 KiB
C
112 lines
4.0 KiB
C
|
#ifndef CLONEJOB_H
|
||
|
#define CLONEJOB_H
|
||
|
|
||
|
#include <QDir>
|
||
|
extern "C" {
|
||
|
#include <git2.h>
|
||
|
}
|
||
|
#include "gitjob.h"
|
||
|
|
||
|
/**
|
||
|
* @class CloneJob
|
||
|
* @brief A class to handle cloning Git repositories in a separate thread.
|
||
|
*
|
||
|
* The CloneJob runs a cloning process in a separate thread and emits
|
||
|
* signals to indicate the success or failure of the operation.
|
||
|
*/
|
||
|
class CloneJob : public GitJob
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
/**
|
||
|
* @brief The main function that performs the cloning operation.
|
||
|
*
|
||
|
* This function overrides the `run()` method from the `QThread` class. It is
|
||
|
* executed when the thread is started, and it handles the process of cloning
|
||
|
* a repository from the specified URL to the target path.
|
||
|
*/
|
||
|
void run() override;
|
||
|
|
||
|
signals:
|
||
|
/**
|
||
|
* @brief Signal emitted when the cloning operation is complete.
|
||
|
*
|
||
|
* This signal is emitted once the cloning operation finishes. It notifies
|
||
|
* the caller whether an error occurred during the cloning process.
|
||
|
*
|
||
|
* @param err A boolean indicating whether an error occurred during cloning.
|
||
|
* `true` if an error occurred, `false` if the clone was successful.
|
||
|
*/
|
||
|
void resultReady(const bool err);
|
||
|
|
||
|
private:
|
||
|
QString m_url; ///< The URL of the Git repository to clone.
|
||
|
QString m_path; ///< The destination path for the cloned repository.
|
||
|
|
||
|
/**
|
||
|
* @brief Prepares the temporary directory for cloning.
|
||
|
*
|
||
|
* This method sets up the required directory structure for cloning a repository.
|
||
|
* It is called before the cloning process begins to ensure that a suitable
|
||
|
* location exists for the repository to be cloned into.
|
||
|
*
|
||
|
* @return A `QDir` object representing the prepared temporary directory.
|
||
|
*/
|
||
|
static QDir cloneSetup();
|
||
|
|
||
|
/**
|
||
|
* @brief Moves the cloned repository to the specified destination.
|
||
|
*
|
||
|
* After the repository has been cloned into a temporary directory, this method
|
||
|
* moves it to the final destination specified by the user.
|
||
|
*
|
||
|
* @param path The destination path to move the repository to.
|
||
|
* @param tmp_dir The temporary directory where the repository was cloned.
|
||
|
* @return `true` if the move was successful, `false` otherwise.
|
||
|
*/
|
||
|
static bool moveToDestination(QDir tmp_dir, QString path);
|
||
|
|
||
|
/**
|
||
|
* @brief Tears down the temporary directory after cloning.
|
||
|
*
|
||
|
* This method is called to clean up the temporary directory after the repository
|
||
|
* has been cloned and moved to the final destination. It removes the temporary
|
||
|
* directory and all its contents.
|
||
|
*
|
||
|
* @param tmp_dir The temporary directory to tear down.
|
||
|
* @return `true` if the teardown was successful, `false` otherwise.
|
||
|
*/
|
||
|
static bool cloneTearDown(QDir tmp_dir);
|
||
|
|
||
|
/**
|
||
|
* @brief Clones a repository from a specified URL.
|
||
|
*
|
||
|
* This method handles the actual cloning process by setting up a temporary
|
||
|
* directory, cloning the repository into it, and then moving it to the final
|
||
|
* destination. It uses the provided credentials to authenticate the cloning
|
||
|
* operation.
|
||
|
*
|
||
|
* @param url The URL of the Git repository to clone.
|
||
|
* @param path The destination path for the cloned repository.
|
||
|
* @param cred The credentials to use for the cloning operation.
|
||
|
* @param cb The callback function for acquiring credentials during cloning.
|
||
|
* @return `true` if the cloning process was successful, `false` otherwise.
|
||
|
*/
|
||
|
static bool clone(QString url, QString path, cred_type cred, git_cred_acquire_cb cb);
|
||
|
|
||
|
public:
|
||
|
/**
|
||
|
* @brief Constructor for the CloneJob class.
|
||
|
*
|
||
|
* Initializes the CloneJob with the specified repository URL, destination path,
|
||
|
* and credentials.
|
||
|
*
|
||
|
* @param url The URL of the Git repository to clone.
|
||
|
* @param path The destination path where the repository will be cloned.
|
||
|
* @param cred The credentials to be used for the cloning process.
|
||
|
*/
|
||
|
CloneJob(QString url, QString path, cred_type cred);
|
||
|
};
|
||
|
|
||
|
#endif // CLONEJOB_H
|