public static List <GitModel.Object> tree(this API_GitHub_Objects gitObjects, string shaTree) { gitObjects.refreshCacher(); var results = gitObjects.ObjectsAPI.Trees(gitObjects.Repository, shaTree).toList(); "Fectched {0} objects from tree: {0}".info(results.size(), shaTree); return(results); }
public static API_GitHub_Objects login(this API_GitHub_Objects gitHubObjects) { var gitHubLogin = @"C:\O2\_USERDATA\accounts.xml".credential("githubApiKey"); var name = gitHubLogin.username(); var apiToken = gitHubLogin.password(); return(gitHubObjects.login(name, apiToken)); }
public static string fileContent(this API_GitHub_Objects gitObjects, string fileName, string sha) { gitObjects.refreshCacher(); "Fetching file {0} with sha {1}".debug(fileName, sha); var blob = gitObjects.ObjectsAPI.Blob(gitObjects.Repository, sha, fileName); if (blob.notNull()) { if (blob.Data.starts("")) { return(blob.Data.Substring(3)); } return(blob.Data); } return(null); }
public static API_GitHub_Objects login(this API_GitHub_Objects gitHubObjects, string name, string apiToken) { gitHubObjects.checkIfCanMakeRequest(); try { var Cache = new BasicCacher.BasicCacher(); var Log = new SimpleLogProvider(); var user = new GitModel.GithubUser { Name = name, APIToken = apiToken }; gitHubObjects.ObjectsAPI = new GitAPI.Object(Cache, Log); gitHubObjects.ObjectsAPI.Authenticate(user); gitHubObjects.LoggedIn = true; } catch (Exception ex) { "Error while logging in to GitHub using user {0}".info(name); ex.log("in API_GitHub_Objects.login"); } return(gitHubObjects); }
public static API_GitHub_Objects setupRepository(this API_GitHub_Objects gitHubObjects, string repository) { gitHubObjects.Repository = repository; return(gitHubObjects); }
public static API_GitHub_Objects add_GitHub_Browser(this API_GitHub_Objects gitHubObjects, Control control) { var objects = gitHubObjects.ObjectsAPI; var topPanel = control; var actionPanel = topPanel.insert_Above(40, "Load repositories"); var currentRepository = ""; var doBinaryDownload = false; var saveFechedFiles = false; var folderToSaveSelectedFiles = ""; Action <string, TreeNode> addTree = (shaTree, treeNode) => { "on repository {0} , fetching tree for ShaTree: {1}".info(currentRepository, shaTree); objects.CacheProvider = new BasicCacher.BasicCacher(); var treeItems = objects.Trees(currentRepository, shaTree); treeNode.add_Nodes(treeItems, (treeItem) => treeItem.Name, (treeItem) => (treeItem.Type == "tree") ? (object)treeItem // if this is tree return the object : (doBinaryDownload) // if it is a file ? (object)treeItem.Sha //for binary downloads we need to store the item's sha : shaTree, //for ascii downloads we need to store the tree's sha (treeItem) => treeItem.Type == "tree" ); "There are {0} nodes".info(treeNode.nodes().size()); foreach (var node in treeNode.nodes()) { node.color((node.nodes().size() == 0) ? Color.DarkBlue // it is a file : Color.DarkOrange // it is a tree (i.e. a folder ); } //treeNode.nodes()[0].selected(); }; var treeView = topPanel.add_TreeView(); var sourceCodeViewer = treeView.insert_Right().add_SourceCodeViewer(); var propertyGrid = treeView.insert_Below(100).add_PropertyGrid().helpVisible(false); treeView.beforeExpand <GitModel.Object>( (treeNode, _object) => { addTree(_object.Sha, treeNode); }); treeView.afterSelect <string>( (sha) => { treeView.backColor(Color.Azure); O2Thread.mtaThread( () => { try { var fileName = treeView.selected().get_Text().urlEncode(); objects.CacheProvider = new BasicCacher.BasicCacher(); string fileContents = ""; if (doBinaryDownload) { var blobBinaryContent = objects.RawBinary(currentRepository, sha); fileContents = blobBinaryContent.ascii(); } else { var blobContent = objects.Blob(currentRepository, sha, fileName); fileContents = blobContent.Data; } sourceCodeViewer.set_Text(fileContents, fileName); if (saveFechedFiles) // need a better solution since this is not taking into account the current folder { var localFile = folderToSaveSelectedFiles.pathCombine(fileName); "saving fetched file to: {0}".info(localFile); fileContents.saveAs(localFile); } } catch (Exception ex) { sourceCodeViewer.set_Text(ex.Message); } treeView.backColor(Color.White); }); }); treeView.afterSelect <GitModel.Object>( (_object) => { propertyGrid.show(_object); if (_object.Type == "blob") { var sha = treeView.selected().get_Tag(); "Parent sha is: {0}".info(sha); return; } }); var actionsPanel = topPanel.insert_Above(50); var repository_TextBox = actionsPanel.add_TextBox(0, "repository", "").left(100); var rootSha_TextBox = actionsPanel.add_TextBox(20, "root tree (Sha)", "").left(100); Action loadRootTree = () => { currentRepository = repository_TextBox.get_Text(); treeView.clear(); var rootObject = new GitModel.Object { Name = repository_TextBox.get_Text(), Sha = rootSha_TextBox.get_Text() }; addTree(rootObject.Sha, treeView.rootNode()); }; rootSha_TextBox.onEnter((text) => loadRootTree()); Action <string, string> load = (repositoryText, rootShaText) => { repository_TextBox.set_Text(repositoryText); rootSha_TextBox.set_Text(rootShaText); loadRootTree(); }; actionPanel.add_Link("SecurityInnovation/YASAT", 0, 0, () => load("SecurityInnovation/YASAT", "2d94d5d39168e38d2a10")) .append_Link("SecurityInnovation/TeamMentor", () => load("SecurityInnovation/TeamMentor", "71419d1c49f6d9c5a6c1")) .append_Link("DinisCruz/TeamMentor", () => load("DinisCruz/TeamMentor", "dc03519a8e0d766f224f")).click(); actionPanel.add_CheckBox("Download selected files as Binaries Blobs", 0, 500, (value) => doBinaryDownload = value).autoSize(); actionPanel.add_CheckBox("Save fecthed files to folder", 0, 750, (value) => saveFechedFiles = value).autoSize() .append_TextBox("").align_Right(actionPanel) .onTextChange((text) => folderToSaveSelectedFiles = text) .set_Text("_SavedGitFiles".tempDir(false)); return(gitHubObjects); }
public static API_GitHub_Objects show_GitHub_Browser(this API_GitHub_Objects gitHubObjects) { var topPanel = O2Gui.open <Panel>("Util - GitHub Browser", 1000, 400); return(gitHubObjects.login().add_GitHub_Browser(topPanel)); }