UNPKG

@git-temporal/git-temporal-react

Version:

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

445 lines (444 loc) 17.2 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for app/actions/commits.ts</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">All files</a> / <a href="index.html">app/actions</a> commits.ts </h1> <div class='clearfix'> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { debug } from 'app/utilities/logger'; &nbsp; import { ICommit } from 'app/interfaces/index'; import { setDates } from 'app/actions/setDates'; import { ActionTypes } from 'app/actions/ActionTypes'; import { isVscode, vscode } from 'app/actions/vscode'; import { fetchDiff } from 'app/actions/diff'; &nbsp; const PAGE_SIZE = 1000; &nbsp; // // These actions fetch commits in pages until all commits are received // // To do this, it // - fetches commitRange to get the bounds for paging // - fetches each page serially until all have been received // // The actions below are chained and in order of calls // // Note that vscode does not have synchronous comm between webview // and extension process, so the next step in the chain after a // call to _fetch() is fired when we asynchronously receive the // data. see src/app/actions/vscode.ts &nbsp; export const fetchCommitsIfNeeded = <span class="fstat-no" title="function not covered" >path</span> =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(d</span>ispatch, getState) =&gt; {</span> <span class="cstat-no" title="statement not covered" > if (shouldFetchCommits(getState(), path)) {</span> <span class="cstat-no" title="statement not covered" > dispatch(requestCommits(path));</span> <span class="cstat-no" title="statement not covered" > dispatch(fetchCommits(path));</span> } }; &nbsp; const shouldFetchCommits = <span class="fstat-no" title="function not covered" >(s</span>tate, path) =&gt; { <span class="cstat-no" title="statement not covered" > return (</span> !state.commits || state.commits.length &lt;= 0 || state.selectedPath !== path ); }; &nbsp; export const requestCommits = <span class="fstat-no" title="function not covered" >path</span> =&gt; (<span class="cstat-no" title="statement not covered" >{</span> selectedPath: path, type: ActionTypes.REQUEST_COMMITS, }); &nbsp; const fetchCommits = <span class="fstat-no" title="function not covered" >path</span> =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async d</span>ispatch =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span> <span class="cstat-no" title="statement not covered" > dispatch(fetchDiff(path, null, null));</span> &nbsp; const response = <span class="cstat-no" title="statement not covered" >await _fetch('commitRange', { path });</span> <span class="cstat-no" title="statement not covered" > if (response) {</span> const commitRange = <span class="cstat-no" title="statement not covered" >await response.json();</span> <span class="cstat-no" title="statement not covered" > dispatch(receiveCommitRange(path, commitRange));</span> } }; &nbsp; export const receiveCommitRange = <span class="fstat-no" title="function not covered" >(p</span>ath, commitRange) =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async d</span>ispatch =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span> // fetch the first page <span class="cstat-no" title="statement not covered" > dispatch(_receiveCommitRange(path, commitRange));</span> <span class="cstat-no" title="statement not covered" > dispatch(fetchPageOfCommits(path, 0, PAGE_SIZE));</span> }; &nbsp; const _receiveCommitRange = <span class="fstat-no" title="function not covered" >(p</span>ath, commitRange) =&gt; { <span class="cstat-no" title="statement not covered" > return {</span> path, commitRange, type: ActionTypes.RECEIVE_COMMIT_RANGE, }; }; &nbsp; export const fetchPageOfCommits = <span class="fstat-no" title="function not covered" >(p</span>ath, skip, maxCount) =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async d</span>ispatch =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span> const response = <span class="cstat-no" title="statement not covered" >await _fetch('history', { path, skip, maxCount });</span> <span class="cstat-no" title="statement not covered" > if (response) {</span> const commits = <span class="cstat-no" title="statement not covered" >await response.json();</span> // will serially dispatch this method until all are received <span class="cstat-no" title="statement not covered" > dispatch(receiveCommits(path, commits));</span> } }; &nbsp; export const receiveCommits = <span class="fstat-no" title="function not covered" >(p</span>ath, response) =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(d</span>ispatch, getState) =&gt; {</span> const state = <span class="cstat-no" title="statement not covered" >getState();</span> <span class="cstat-no" title="statement not covered" > if (!state.isFetching || path !== state.selectedPath) {</span> // the user probably navigated to a new file or dir while paging <span class="cstat-no" title="statement not covered" > return;</span> } &nbsp; <span class="cstat-no" title="statement not covered" > dispatch(_receiveCommits(path, response));</span> <span class="cstat-no" title="statement not covered" > debug('actions/commits receiveCommits', response.skip);</span> &nbsp; <span class="cstat-no" title="statement not covered" > if (state.isDiffDeferred) {</span> const { commits } = <span class="cstat-no" title="statement not covered" >getState();</span> <span class="cstat-no" title="statement not covered" > dispatch(fetchDiff(path, commits[1], commits[0]));</span> } &nbsp; const nextSkip = <span class="cstat-no" title="statement not covered" >response.skip + PAGE_SIZE;</span> const { totalCommits } = <span class="cstat-no" title="statement not covered" >getState();</span> <span class="cstat-no" title="statement not covered" > if (nextSkip &lt; totalCommits) {</span> // if you ask `git log -skip 500 -max-count 500` and there are say 510 // commits, git will return the last 500 commits instead of the last 10 const pageSize = <span class="cstat-no" title="statement not covered" > nextSkip + PAGE_SIZE &gt; totalCommits ? totalCommits - nextSkip : PAGE_SIZE;</span> <span class="cstat-no" title="statement not covered" > dispatch(fetchPageOfCommits(path, nextSkip, pageSize));</span> } else { <span class="cstat-no" title="statement not covered" > dispatch(receivedAllCommits(path));</span> } }; &nbsp; export const _receiveCommits = <span class="fstat-no" title="function not covered" >(p</span>ath, response) =&gt; (<span class="cstat-no" title="statement not covered" >{</span> selectedPath: path, commits: response.commits, isFileSelected: response.isFile, type: ActionTypes.RECEIVE_COMMITS, }); &nbsp; export const receivedAllCommits = <span class="fstat-no" title="function not covered" >path</span> =&gt; (<span class="cstat-no" title="statement not covered" >{</span> selectedPath: path, type: ActionTypes.RECEIVED_All_COMMITS, }); &nbsp; const _fetch = <span class="fstat-no" title="function not covered" >(c</span>ommand, params) =&gt; { <span class="cstat-no" title="statement not covered" > if (isVscode) {</span> <span class="cstat-no" title="statement not covered" > debug('sending request to vscode', command, params);</span> // see actions/vscode.ts for response handling that comes as a window event <span class="cstat-no" title="statement not covered" > vscode.postMessage({ ...params, command });</span> <span class="cstat-no" title="statement not covered" > return null;</span> } // TODO : replace this with serviceBaseUrl when it is in const url = <span class="cstat-no" title="statement not covered" >new URL(`http://localhost:11966/git-temporal/${command}`);</span> <span class="cstat-no" title="statement not covered" > url.search = new URLSearchParams(params).toString();</span> <span class="cstat-no" title="statement not covered" > return fetch(url.toString());</span> }; &nbsp; export const selectSingleCommit = <span class="fstat-no" title="function not covered" >commit</span> =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(d</span>ispatch: any, _getState: any) =&gt; {</span> <span class="cstat-no" title="statement not covered" > dispatch(</span> setDates((commit.authorDate - 1) * 1000, (commit.authorDate + 1) * 1000) ); }; &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Jan 20 2020 20:05:02 GMT-0800 (PST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>