From 067292e745867c051e7e751b46f47a1a258e91c7 Mon Sep 17 00:00:00 2001
From: kriskbx
Date: Mon, 27 Aug 2018 12:25:25 +0200
Subject: [PATCH 01/52] Move documentation to own file. Reference gtt taskbar
---
CONTRIBUTING.md | 6 -
documentation.md | 837 +++++++++++++++++++++++++++++++++++++++++
preview/icon.gvdesign | Bin 0 -> 11909 bytes
readme.md | 838 +-----------------------------------------
4 files changed, 844 insertions(+), 837 deletions(-)
delete mode 100755 CONTRIBUTING.md
create mode 100644 documentation.md
create mode 100644 preview/icon.gvdesign
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100755
index 0154cce..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# contributing
-
-I would love to integrate unit testing in this project, but unfortunately my knowledge of testing in the JavaScript/Node.js world is very limited. (I'm actually a PHP dev) So this would be a very helpful thing to contribute but of course all contributions are very welcome.
-
- Please work in your own branch, e.g. integrate-awesome-feature, fix-awful-bug, improve-this-crappy-docs
- Create a pull request to the dev branch
diff --git a/documentation.md b/documentation.md
new file mode 100644
index 0000000..76747f1
--- /dev/null
+++ b/documentation.md
@@ -0,0 +1,837 @@
+# gtt documentation
+
+## contents
+
+* [requirements](#requirements)
+* [installation](#installation)
+* [updating](#updating)
+* [docker](#docker)
+* [commands](#commands)
+ * [I) configuration](#i-configuration)
+ * [II) time tracking](#ii-time-tracking)
+ * [III) reports](#iii-reports)
+* [configuration](#configuration)
+ * [config file](#config-file)
+ * [time format](#time-format)
+* [how to use gtt as a library](#how-to-use-gtt-as-a-library)
+* [dumps](#dumps)
+* [faqs](#faqs)
+* [contributing](#contributing)
+* [support further development 🍺](#support-further-development)
+* [license](#license)
+
+## requirements
+
+* [node.js](https://nodejs.org/en/download) version >= 6
+* [npm](https://github.com/npm/npm) or [yarn](https://yarnpkg.com/en/docs/install)
+
+## installation
+
+Install the gtt command line interface using yarn:
+
+```shell
+yarn global add gitlab-time-tracker --prefix /usr/local
+```
+
+... or using npm (recommended on **Windows** operating systems):
+
+```shell
+npm install -g gitlab-time-tracker
+```
+
+Run the config command to create a config file and open it in your default editor.
+In linux terminal, you must set your preferred editor in the environment. For example, use `export EDITOR=vim` to edit the files with vim (put this in `.bashrc` or similar to have it always configured).
+If nothing happens, open the file manually: `~/.gtt/config.yml` - on Windows: `C:\Users\YourUserName\.gtt\config.yml`
+
+```shell
+gtt config
+```
+
+Add your GitLab API url and your [GitLab API personal token](https://gitlab.com/profile/personal_access_tokens)
+to the config file and save it afterwards:
+
+```yaml
+url: https://gitlab.com/api/v4/
+token: 01234567891011
+```
+
+## updating
+
+**Updating from version <= 1.5? Please [click here](https://github.com/kriskbx/gitlab-time-tracker/blob/master/upgrade.md)!**
+
+Update gtt via yarn:
+
+```shell
+yarn global upgrade gitlab-time-tracker
+```
+
+... or npm:
+
+```shell
+npm install -g gitlab-time-tracker
+```
+
+## docker
+
+You don't need to have node and gtt installed on your system in order to use gtt,
+you can use the official [Docker image](https://hub.docker.com/r/kriskbx/gitlab-time-tracker) as well:
+
+```shell
+docker run \
+ --rm -it \
+ -v ~:/root \
+ kriskbx/gitlab-time-tracker \
+ --help
+```
+
+`--rm` removes the container after running, `-it` makes it interactive, `-v ~:/root` mounts your home directory to the
+home directory inside the container. If you want to store the config in another place, mount another directory:
+
+
+ ```shell
+ docker run \
+ --rm -it \
+ -v /path/to/gtt-config:/root \
+ kriskbx/gitlab-time-tracker \
+ --help
+ ```
+
+... or use a Docker volume:
+
+```shell
+docker volume create gtt-config
+
+docker run \
+ --rm -it \
+ -v gtt-config:/root \
+ kriskbx/gitlab-time-tracker \
+ --help
+```
+
+I highly recommend creating an alias and adding it to your `bashrc`:
+
+```shell
+echo "alias gtt='docker run --rm -it -v ~:/root kriskbx/gitlab-time-tracker'" >>~/.bashrc
+```
+
+Now you can simply write `gtt` instead of the bulky Docker command before. Try it out: `gtt --help`
+
+**Note:** If you want to save reports via the `--file` parameter, make sure to save them in `/root` or another
+mounted directory that you have access to on your host machine. Take a look at the [Docker documentation](https://docs.docker.com/engine/tutorials/dockervolumes/) about how Docker handles data and volumes.
+
+## commands
+
+### I) configuration
+
+*[Click here](#configuration) for a complete list of configuration options.*
+
+**Edit/create the global configuration file, stored in your home directory:**
+
+```shell
+gtt config
+```
+
+If nothing happens, open the file manually: `~/.gtt/config.yml` - on Windows: `C:\Users\YourUserName\.gtt\config.yml`
+
+**Edit/create a local configuration file `.gtt.yml` in the current working directory:**
+
+```shell
+gtt config --local
+```
+
+If a local configuration file is present it will extend of the global one and overwrites global settings.
+If you don't want to extend the global configuration file, set the `extend` option in your local config to `false`.
+So you can use gtt easily on a per project basis. Make sure to add .gtt.yml to your gitignore file if using a local configuration.
+
+### II) time tracking
+
+Time tracking enables you to monitor the time you spent on an issue or merge request locally.
+When you're done, you can sync these time records to GitLab: gtt adds the time spent to the given
+issue or merge request and automagically keeps everything in sync with your local data.
+
+Did you forgot to stop time monitoring locally and accidentally synced it to GitLab?
+No worries, just edit the local record and run sync again.
+
+**Start local time monitoring for the given project and issue id:**
+
+```shell
+gtt start "kriskbx/example-project" 15
+gtt start 15
+```
+
+If you configured a project in your config you can omit the project.
+
+**Start local time monitoring for a merge request:**
+
+```shell
+gtt start --type=merge_request "kriskbx/example-project" 15
+gtt start --type=merge_request 15
+```
+
+**Start local time monitoring and create a new issue or merge request with the given title:**
+
+```shell
+gtt create "kriskbx/example-project" "New Issue"
+gtt create "New Issue"
+gtt create --type=merge_request "kriskbx/example-project" "New Issue"
+gtt create --type=merge_request "New Issue"
+```
+
+**Show the current time monitoring status:**
+
+```shell
+gtt status
+```
+
+**Stop local time monitoring and save as a new time record:**
+
+```shell
+gtt stop
+```
+
+**Cancel local time monitoring and discard the time record:**
+
+```shell
+gtt cancel
+```
+
+**Show a list of all local time records (including their ids and meta data):**
+
+```shell
+gtt log
+```
+Note: gtt log uses UTC as default timezone. If you want to display the times in a different timezone, make sure to use `timezone: "Europe/Berlin"` in your config.
+
+**Edit a local time record by the given id:**
+
+```shell
+gtt edit 2XZkV5LNM
+gtt edit
+```
+
+You can omit the id to edit the last added time record.
+
+**Delete a local time record by the given id:**
+
+```shell
+gtt delete 2XZkV5LNM
+gtt delete
+```
+
+You can omit the id to delete the last added time record.
+
+**Sync local time records with time tracking data on Gitlab:**
+
+```shell
+gtt sync
+gtt sync --proxy="http://localhost:8888"
+```
+
+You can pass an url to the proxy option if you want to use a proxy server.
+
+### III) reports
+
+Get a report for the time tracking data stored on GitLab. If you want to include your local data make sure to sync it
+before running the report command. The report command has a lot of options to filter data and output, make sure to
+read through the docs before using it.
+
+#### Get a report
+
+```shell
+gtt report ["namespace/project"] [issue_id]
+gtt report "kriskbx/example-project"
+gtt report "kriskbx/example-project" 145
+gtt report "kriskbx/example-project" 145 209 45 54
+gtt report
+gtt report 145
+gtt report 123 345 123
+```
+
+If you configured a project in your config file you can omit it. By passing a or multiple ids you can limit the
+report to the given issues or merge requests. *Note: if you're passing a or multiple ids, gtt will fetch issues
+with these ids by default. If you want to fetch merge requests you can change the query type using the
+`--query` option.*
+
+#### Query groups and subgroups
+
+```shell
+gtt report ["namespace"] --type=group
+gtt report example-group --type=group
+gtt report example-group --type=group --subgroups
+```
+
+Query all projects from the given group and combine the data into a single report. The option `--subgroups`
+includes subgroups.
+
+#### Query multiple projects or groups and combine the data in one report
+
+```shell
+gtt report ["namespace/project"] ["namespace/project"] ...
+gtt report "kriskbx/example-project" "kriskbx/example-project-2"
+gtt report ["namespace"] ["namespace"] ... --type=group
+gtt report example-group example-group-2 --type=group
+```
+
+*Hint: use the `project_id` or `project_namespace` columns in your report.*
+
+#### Choose an output for your report
+
+```shell
+gtt report --output=table
+gtt report --output=markdown
+gtt report --output=csv
+gtt report --output=pdf --file=filename.pdf
+```
+
+Defaults to `table`. `csv` and `markdown` can be printed to stdout, `pdf` needs the file parameter.
+
+#### Print the output to a file
+
+```shell
+gtt report --file=filename.txt
+```
+
+#### Only get time records from the given time frame
+
+```shell
+gtt report --from="2017-03-01" --to="2017-04-01"
+```
+
+*Note: `--from` defaults to 1970-01-01, `--to` defaults to now. Make sure to use an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) compatible time/date format.*
+
+There are some quick shorthands:
+
+```shell
+gtt report --today
+gtt report --this_week
+gtt report --this_month
+```
+
+#### Include closed issues/merge requests
+
+```shell
+gtt report --closed
+```
+
+#### Limit to the given user
+
+```shell
+gtt report --user=username
+```
+
+#### Limit to the given milestone
+
+```shell
+gtt report --milestone=milestone_name
+```
+
+#### Limit issues and merge requests to the given labels
+
+```shell
+gtt report --include_by_labels=critical --include_by_labels=important
+```
+
+#### Exclude issues and merge requests that have the given labels
+
+```shell
+gtt report --exclude_by_labels=wont-fix --exclude_by_labels=ignore
+```
+
+#### Limit the query to the given data type
+
+```shell
+gtt report --query=issues
+gtt report --query=merge_requests
+```
+
+#### Include issues and merge requests in the report that have no time records
+
+```shell
+gtt report --show_without_times
+```
+
+#### Limit the parts in the final report
+
+```shell
+gtt report --report=stats --report=issues
+```
+
+*Note: These parts are available: `stats`, `issues`, `merge_requests`, `records`*
+
+#### Hide headlines in the report
+
+```shell
+gtt report --no_headlines
+```
+
+#### Hide warnings in the report
+
+```shell
+gtt report --no_warnings
+```
+
+#### Set date format for the report
+
+```shell
+gtt report --date_format="DD.MM.YYYY HH:mm:ss"
+```
+
+*Note: [Click here](http://momentjs.com/docs/#/displaying/format/) for a further documentation on the date format.*
+
+#### Set time format for the report
+
+```shell
+gtt report --time_format="[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
+```
+
+*Note: [Click here](#time-format) for a further documentation on the time format.*
+
+#### Set hours per day
+
+```shell
+gtt report --hours_per_day=6
+```
+
+#### Set columns included in the time record table
+
+```shell
+gtt report --record_columns=user --record_columns=date --record_columns=time
+```
+
+*Note: Available columns to choose from: `user`, `date`, `type`, `iid`, `project_id`, `project_namespace`, `time`*
+
+#### Set columns included in the issue table
+
+```shell
+gtt report --issue_columns=iid --issue_columns=title --issue_columns=time_username
+```
+
+*Note: Available columns to choose from: `id`, `iid`, `title`, `project_id`,
+`project_namespace`, `description`, `labels`, `milestone`, `assignee`, `author`,
+`closed`, `updated_at`, `created_at`, `state`, `spent`, `total_spent`, `total_estimate`*
+
+*You can also include columns that show the total time spent by a specific user
+by following this convention: `time_username`*
+
+#### Set columns included in the merge request table
+
+```shell
+gtt report --merge_request_columns=iid --merge_request_columns=title --merge_request_columns=time_username
+```
+
+*Note: Available columns to choose from: `id`, `iid`, `title`, `project_id`,
+`project_namespace`, `description`, `labels`, `milestone`, `assignee`, `author`,
+`updated_at`, `created_at`, `state`, `spent`, `total_spent`, `total_estimate`*
+
+*You can also include columns that show the total time spent by a specific user
+by following this convention: `time_username`*
+
+#### Add columns for each project member to issue and merge request table, including their total time spent
+
+```shell
+gtt report --user_columns
+```
+
+#### Only include the given labels in the report
+
+```shell
+gtt report --include_labels=pending --include_labels=approved
+```
+
+#### Exclude the given labels from the report
+
+```shell
+gtt report --exclude_labels=bug --exclude_labels=feature
+```
+
+#### Use a proxy server
+
+```shell
+gtt report --proxy="http://localhost:8080"
+```
+
+#### Output verbose debug information
+
+```shell
+gtt report --verbose
+```
+
+## configuration
+
+The configuration uses the [yaml file format](http://www.yaml.org/spec/1.2/spec.html).
+[Click here](#i-configuration) for more information how to edit and create a config file.
+
+### Config File
+
+Here's a sample configuration file including all available options:
+
+```yaml
+# Url to the gitlab api
+# Make sure there's a trailing slash
+# [required]
+url: http://gitlab.com/api/v4/
+
+# GitLab personal api token
+# [required]
+token: abcdefghijklmnopqrst
+
+# Use a proxy server
+# defaults to false
+proxy: http://localhost:8080
+
+# Don't check SSL certificate
+# defaults to false
+insecure: true
+
+# Project
+# defaults to false
+project: namespace/projectname
+
+# Include closed issues and merge requests
+# defaults to false
+closed: true
+
+# Limit to the given milestone
+# defaults to false
+milestone: milestone_name
+
+# Exclude issues and merge requests that have the given labels
+# defaults to an empty array
+excludeByLabels:
+- wont-fix
+- ignore
+
+# Limit issues and merge requests to the given labels
+# defaults to an empty array
+includeByLabels:
+- critical
+- important
+
+# Limit the query to the given data type
+# available: issues, merge_requests
+# defaults to [issues, merge_requests]
+query:
+- issues
+
+# Limit the parts in the final report
+# available: stats, issues, merge_requests, records
+# defaults to [stats, issues, merge_requests, records]
+report:
+- stats
+- records
+
+# Hide headlines in the report
+# defaults to false
+noHeadlines: true
+
+# Hide warnings in the report
+# defaults to false
+noWarnings: true
+
+# Include issues and merge requests in the report that have no time records
+# defaults to false
+showWithoutTimes: true
+
+# Hours per day
+# defaults to 8
+hoursPerDay: 8
+
+# Days per week
+# defaults to 5
+daysPerWeek: 5
+
+# Weeks per month
+# defaults to 4
+weeksPerMonth: 4
+
+# Include the given columns in the issue table
+# See --issue_columns option for more information
+# defaults to iid, title, spent, total_estimate
+issueColumns:
+- iid
+- title
+- total_estimate
+
+# Include the given columns in the merge request table
+# See --merge_request_columns option for more information
+# defaults to iid, title, spent, total_estimate
+mergeRequestColumns:
+- iid
+- title
+- total_estimate
+
+# Include the given columns in the time record table
+# See --record_columns option for more information
+# defaults to user, date, type, iid, time
+recordColumns:
+- user
+- iid
+- time
+
+# Add columns for each project member to issue and
+# merge request table, including their total time spent
+# defaults to true
+userColumns: true
+
+# Date format
+# Click here for format options: http://momentjs.com/docs/#/displaying/format/
+# defaults to DD.MM.YYYY HH:mm:ss
+dateFormat: DD.MM.YYYY HH:mm:ss
+
+# Time format
+# See time format configuration below
+# defaults to "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
+timeFormat: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
+
+# Time format for different parts of the report
+# Instead of specifying one global time format you can specify one for every
+# part of the report and the log command
+timeFormat:
+ log: "[%sign][%hours_overall]"
+ stats: "[%sign][%days_overall]"
+ issues: "[%sign][%hours_overall]"
+ merge_requests: "[%sign][%hours_overall]"
+ records: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
+
+# Change your timezone
+# default: UTC
+timezone: "Europe/Berlin"
+
+# Output type
+# Available: csv, table, markdown, pdf
+# defaults to table
+output: markdown
+
+# Exclude the given labels from the report
+# defaults to an empty array
+excludeLabels:
+- bug
+- feature
+
+# Only include the given labels in the report
+# defaults to an empty array
+includeLabels:
+- pending
+- approved
+
+# Only works if using a local configuration file!
+# Extend the global configuration if set to true, pass a string to extend
+# the configuration file stored at the given path
+# defaults to true
+extend: true
+
+# Change number of concurrent connections/http queries
+# Note: Handle with care, we don't want to spam GitLabs API too much
+# defaults to 10
+_parallel: 20
+
+# Change rows per page (max. 100)
+# defaults to 100
+_perPage: 100
+
+# Verbose output
+_verbose: false
+
+# Check access token validity up front
+_checkToken: false
+
+# Skip parsing the issue/merge_request description for time records
+_skipDescriptionParsing: false
+```
+
+### Time format
+
+##### `[%sign]`, `[%days]`, `[%hours]`, `[%minutes]`, `[%seconds]`
+
+Prints out the raw data.
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%days]d [%hours]h [%minutes]m [%seconds]s"
+```
+
+**Example outputs:**
+
+```shell
+0d 0h 30m 15s
+-1d 10h 15m 0s
+```
+
+##### `[%days>string]`, `[%hours>string]`, `[%minutes>string]`, `[%seconds>string]`
+
+This is a conditional: it prints out the raw data and appends the given string if the
+data is greater than zero.
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
+```
+
+**Example outputs:**
+
+```shell
+30m 15s
+-1d 10h 15m
+```
+
+##### `[%Days]`, `[%Hours]`, `[%Minutes]`, `[%Seconds]`, `[%Days>string]`, `[%Hours>string]`, `[%Minutes>string]`, `[%Seconds>string]`
+
+First letter uppercase adds leading zeros.
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%Days]:[%Hours]:[%Minutes]:[%Seconds]"
+```
+
+**Example outputs:**
+
+```shell
+00:00:30:15
+-01:10:15:00
+```
+
+##### `[%days_overall]`, `[%hours_overall]`, `[%minutes_overall]`, `[%seconds_overall]`
+
+Instead of printing out the second-, minute-, hour-, day-part of the duration this
+prints the complete time in either seconds, minutes, hours or days.
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%minutes_overall]"
+```
+
+**Example outputs:**
+
+```shell
+30.25
+1095
+```
+
+##### `[%days_overall_comma]`, `[%hours_overall_comma]`, `[%minutes_overall_comma]`, `[%seconds_overall_comma]`
+
+Use a comma for float values instead of a point. (Useful for some european countries)
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%minutes_overall]"
+```
+
+**Example outputs:**
+
+```shell
+30,25
+1095
+```
+
+##### `[%hours_overall:2]`, `[%days_overall:3]`
+
+You can ceil any float value by adding the number of decimals to keep separated with a `:`.
+
+**Example config:**
+
+```yaml
+timeFormat: "[%sign][%hours_overall:2]"
+```
+
+**Example outputs:**
+
+```shell
+0,51
+18,25
+```
+
+## how to use gtt as a library
+
+Add as a dependency using yarn:
+
+```shell
+yarn add gitlab-time-tracker
+```
+
+... or using npm:
+
+```shell
+npm install --save gitlab-time-tracker
+```
+
+Use it in your project:
+
+```js
+// require modules
+const Config = require('gitlab-time-tracker/src/include/config');
+const Report = require('gitlab-time-tracker/src/models/report');
+
+// create a default config
+let config = new Config();
+
+// set required parameters
+config.set('token', 'abcdefghijklmnopqrst');
+config.set('project', 'namespace/project');
+
+// create report
+let report = new Report(config);
+
+// query and process data
+try {
+ await report.getProject()
+ await report.getIssues()
+ await report.getMergeRequests()
+ await report.processIssues()
+ await report.processMergeRequests()
+} catch (error) {
+ console.log(error)
+}
+
+// access data on report
+report.issues.forEach(issue => {
+ // time records on issue
+ console.log(issue.times);
+ // time spent of single time record
+ console.log(issue.times[0].time);
+});
+report.mergeRequests.forEach(mergeRequest => {
+ // time records on merge requests
+ console.log(mergeRequest.times);
+ // user of single time record
+ console.log(mergeRequest.times[0].user);
+});
+```
+
+## dumps
+
+Starting with 1.7.4 gtt can dump the results of all API requests within a report and use it on another machine without access to the GitLab instance itself. This is very useful for debugging purposes. If you stumble upon a bug which could be unique to your set of data, please rerun the report with these options to save a dump to the given file: `--output=dump --file=/path/dump.json` Check your dump for sensitive information and provide it when asked.
+
+## faqs
+
+#### What is the difference between 'total spent' and 'spent'?
+
+`total spent` is the total amount of time spent in all issues after filtering.
+It can include times outside the queried time frame. `spent` on the other hand
+is the total amount of time spent in the given time frame.
+
+## contributing
+
+I would love to integrate unit testing in this project, but unfortunately my knowledge of
+testing in the JavaScript/Node.js world is very limited. (I'm actually a PHP dev)
+So this would be a very helpful thing to contribute but of course all contributions are very welcome.
+
+* Please work in your own branch, e.g. `integrate-awesome-feature`, `fix-awful-bug`, `improve-this-crappy-docs`
+* Create a pull request to the `dev` branch
+
+## support further development
+
+gtt is an open source project, developed and maintained completely in my free time.
+
+If you enjoy using gtt you can support the project by [contributing](#contributing) to the code base,
+sharing it to your colleagues and co-workers or monetarily by [donating via PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DN9YVDKFGC6V6).
+Every type of support is helpful and thank you very much if you consider supporting the project
+or already have done so. 💜
+
+## license
+
+GPL v2
diff --git a/preview/icon.gvdesign b/preview/icon.gvdesign
new file mode 100644
index 0000000000000000000000000000000000000000..56a1d7905b22be8f356651c61a2622669b500aa3
GIT binary patch
literal 11909
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
LYS~e=%VhunFb?L8
literal 0
HcmV?d00001
diff --git a/readme.md b/readme.md
index 9b14240..5d24f99 100755
--- a/readme.md
+++ b/readme.md
@@ -10,842 +10,18 @@
-> gtt is a fully featured command line interface for GitLab's time tracking feature. It monitors the time you spent on an issue or merge request locally and syncs it to GitLab. It also allows you to create reports in various formats from time tracking data stored on GitLab.
+## introduction
-**Please support the development of this free software by [donating or sharing](#buy-me-a-beer)!**
+gtt is a fully featured command line interface for GitLab's time tracking feature. It monitors the time you spent on an issue or merge request locally and syncs it to GitLab. It also allows you to create reports in various formats from time tracking data stored on GitLab. **Looking for a Graphical User Interface? Check out the [gtt taskbar/menubar app](https://github.com/kriskbx/gitlab-time-tracker-taskbar) for Linux, Mac & Windows!**
-## contents
+## documentation
-* [requirements](#requirements)
-* [installation](#installation)
-* [updating](#updating)
-* [docker](#docker)
-* [commands](#commands)
- * [I) configuration](#i-configuration)
- * [II) time tracking](#ii-time-tracking)
- * [III) reports](#iii-reports)
-* [configuration](#configuration)
- * [config file](#config-file)
- * [time format](#time-format)
-* [how to use gtt as a library](#how-to-use-gtt-as-a-library)
-* [dumps](#dumps)
-* [faqs](#faqs)
-* [contributing](#contributing)
-* [buy me a beer 🍺](#buy-me-a-beer)
-* [license](#license)
+You can find the documentation [here]().
-## requirements
+## support further development
-* [node.js](https://nodejs.org/en/download) version >= 6
-* [npm](https://github.com/npm/npm) or [yarn](https://yarnpkg.com/en/docs/install)
-
-## installation
-
-Install the gtt command line interface using yarn:
-
-```shell
-yarn global add gitlab-time-tracker --prefix /usr/local
-```
-
-... or using npm (recommended on **Windows** operating systems):
-
-```shell
-npm install -g gitlab-time-tracker
-```
-
-Run the config command to create a config file and open it in your default editor.
-In linux terminal, you must set your preferred editor in the environment. For example, use `export EDITOR=vim` to edit the files with vim (put this in `.bashrc` or similar to have it always configured).
-If nothing happens, open the file manually: `~/.gtt/config.yml` - on Windows: `C:\Users\YourUserName\.gtt\config.yml`
-
-```shell
-gtt config
-```
-
-Add your GitLab API url and your [GitLab API personal token](https://gitlab.com/profile/personal_access_tokens)
-to the config file and save it afterwards:
-
-```yaml
-url: https://gitlab.com/api/v4/
-token: 01234567891011
-```
-
-## updating
-
-**Updating from version <= 1.5? Please [click here](https://github.com/kriskbx/gitlab-time-tracker/blob/master/upgrade.md)!**
-
-Update gtt via yarn:
-
-```shell
-yarn global upgrade gitlab-time-tracker
-```
-
-... or npm:
-
-```shell
-npm install -g gitlab-time-tracker
-```
-
-## docker
-
-You don't need to have node and gtt installed on your system in order to use gtt,
-you can use the official [Docker image](https://hub.docker.com/r/kriskbx/gitlab-time-tracker) as well:
-
-```shell
-docker run \
- --rm -it \
- -v ~:/root \
- kriskbx/gitlab-time-tracker \
- --help
-```
-
-`--rm` removes the container after running, `-it` makes it interactive, `-v ~:/root` mounts your home directory to the
-home directory inside the container. If you want to store the config in another place, mount another directory:
-
-
- ```shell
- docker run \
- --rm -it \
- -v /path/to/gtt-config:/root \
- kriskbx/gitlab-time-tracker \
- --help
- ```
-
-... or use a Docker volume:
-
-```shell
-docker volume create gtt-config
-
-docker run \
- --rm -it \
- -v gtt-config:/root \
- kriskbx/gitlab-time-tracker \
- --help
-```
-
-I highly recommend creating an alias and adding it to your `bashrc`:
-
-```shell
-echo "alias gtt='docker run --rm -it -v ~:/root kriskbx/gitlab-time-tracker'" >>~/.bashrc
-```
-
-Now you can simply write `gtt` instead of the bulky Docker command before. Try it out: `gtt --help`
-
-**Note:** If you want to save reports via the `--file` parameter, make sure to save them in `/root` or another
-mounted directory that you have access to on your host machine. Take a look at the [Docker documentation](https://docs.docker.com/engine/tutorials/dockervolumes/) about how Docker handles data and volumes.
-
-## commands
-
-### I) configuration
-
-*[Click here](#configuration) for a complete list of configuration options.*
-
-**Edit/create the global configuration file, stored in your home directory:**
-
-```shell
-gtt config
-```
-
-If nothing happens, open the file manually: `~/.gtt/config.yml` - on Windows: `C:\Users\YourUserName\.gtt\config.yml`
-
-**Edit/create a local configuration file `.gtt.yml` in the current working directory:**
-
-```shell
-gtt config --local
-```
-
-If a local configuration file is present it will extend of the global one and overwrites global settings.
-If you don't want to extend the global configuration file, set the `extend` option in your local config to `false`.
-So you can use gtt easily on a per project basis. Make sure to add .gtt.yml to your gitignore file if using a local configuration.
-
-### II) time tracking
-
-Time tracking enables you to monitor the time you spent on an issue or merge request locally.
-When you're done, you can sync these time records to GitLab: gtt adds the time spent to the given
-issue or merge request and automagically keeps everything in sync with your local data.
-
-Did you forgot to stop time monitoring locally and accidentally synced it to GitLab?
-No worries, just edit the local record and run sync again.
-
-**Start local time monitoring for the given project and issue id:**
-
-```shell
-gtt start "kriskbx/example-project" 15
-gtt start 15
-```
-
-If you configured a project in your config you can omit the project.
-
-**Start local time monitoring for a merge request:**
-
-```shell
-gtt start --type=merge_request "kriskbx/example-project" 15
-gtt start --type=merge_request 15
-```
-
-**Start local time monitoring and create a new issue or merge request with the given title:**
-
-```shell
-gtt create "kriskbx/example-project" "New Issue"
-gtt create "New Issue"
-gtt create --type=merge_request "kriskbx/example-project" "New Issue"
-gtt create --type=merge_request "New Issue"
-```
-
-**Show the current time monitoring status:**
-
-```shell
-gtt status
-```
-
-**Stop local time monitoring and save as a new time record:**
-
-```shell
-gtt stop
-```
-
-**Cancel local time monitoring and discard the time record:**
-
-```shell
-gtt cancel
-```
-
-**Show a list of all local time records (including their ids and meta data):**
-
-```shell
-gtt log
-```
-Note: gtt log uses UTC as default timezone. If you want to display the times in a different timezone, make sure to use `timezone: "Europe/Berlin"` in your config.
-
-**Edit a local time record by the given id:**
-
-```shell
-gtt edit 2XZkV5LNM
-gtt edit
-```
-
-You can omit the id to edit the last added time record.
-
-**Delete a local time record by the given id:**
-
-```shell
-gtt delete 2XZkV5LNM
-gtt delete
-```
-
-You can omit the id to delete the last added time record.
-
-**Sync local time records with time tracking data on Gitlab:**
-
-```shell
-gtt sync
-gtt sync --proxy="http://localhost:8888"
-```
-
-You can pass an url to the proxy option if you want to use a proxy server.
-
-### III) reports
-
-Get a report for the time tracking data stored on GitLab. If you want to include your local data make sure to sync it
-before running the report command. The report command has a lot of options to filter data and output, make sure to
-read through the docs before using it.
-
-#### Get a report
-
-```shell
-gtt report ["namespace/project"] [issue_id]
-gtt report "kriskbx/example-project"
-gtt report "kriskbx/example-project" 145
-gtt report "kriskbx/example-project" 145 209 45 54
-gtt report
-gtt report 145
-gtt report 123 345 123
-```
-
-If you configured a project in your config file you can omit it. By passing a or multiple ids you can limit the
-report to the given issues or merge requests. *Note: if you're passing a or multiple ids, gtt will fetch issues
-with these ids by default. If you want to fetch merge requests you can change the query type using the
-`--query` option.*
-
-#### Query groups and subgroups
-
-```shell
-gtt report ["namespace"] --type=group
-gtt report example-group --type=group
-gtt report example-group --type=group --subgroups
-```
-
-Query all projects from the given group and combine the data into a single report. The option `--subgroups`
-includes subgroups.
-
-#### Query multiple projects or groups and combine the data in one report
-
-```shell
-gtt report ["namespace/project"] ["namespace/project"] ...
-gtt report "kriskbx/example-project" "kriskbx/example-project-2"
-gtt report ["namespace"] ["namespace"] ... --type=group
-gtt report example-group example-group-2 --type=group
-```
-
-*Hint: use the `project_id` or `project_namespace` columns in your report.*
-
-#### Choose an output for your report
-
-```shell
-gtt report --output=table
-gtt report --output=markdown
-gtt report --output=csv
-gtt report --output=pdf --file=filename.pdf
-```
-
-Defaults to `table`. `csv` and `markdown` can be printed to stdout, `pdf` needs the file parameter.
-
-#### Print the output to a file
-
-```shell
-gtt report --file=filename.txt
-```
-
-#### Only get time records from the given time frame
-
-```shell
-gtt report --from="2017-03-01" --to="2017-04-01"
-```
-
-*Note: `--from` defaults to 1970-01-01, `--to` defaults to now. Make sure to use an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) compatible time/date format.*
-
-There are some quick shorthands:
-
-```shell
-gtt report --today
-gtt report --this_week
-gtt report --this_month
-```
-
-#### Include closed issues/merge requests
-
-```shell
-gtt report --closed
-```
-
-#### Limit to the given user
-
-```shell
-gtt report --user=username
-```
-
-#### Limit to the given milestone
-
-```shell
-gtt report --milestone=milestone_name
-```
-
-#### Limit issues and merge requests to the given labels
-
-```shell
-gtt report --include_by_labels=critical --include_by_labels=important
-```
-
-#### Exclude issues and merge requests that have the given labels
-
-```shell
-gtt report --exclude_by_labels=wont-fix --exclude_by_labels=ignore
-```
-
-#### Limit the query to the given data type
-
-```shell
-gtt report --query=issues
-gtt report --query=merge_requests
-```
-
-#### Include issues and merge requests in the report that have no time records
-
-```shell
-gtt report --show_without_times
-```
-
-#### Limit the parts in the final report
-
-```shell
-gtt report --report=stats --report=issues
-```
-
-*Note: These parts are available: `stats`, `issues`, `merge_requests`, `records`*
-
-#### Hide headlines in the report
-
-```shell
-gtt report --no_headlines
-```
-
-#### Hide warnings in the report
-
-```shell
-gtt report --no_warnings
-```
-
-#### Set date format for the report
-
-```shell
-gtt report --date_format="DD.MM.YYYY HH:mm:ss"
-```
-
-*Note: [Click here](http://momentjs.com/docs/#/displaying/format/) for a further documentation on the date format.*
-
-#### Set time format for the report
-
-```shell
-gtt report --time_format="[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
-```
-
-*Note: [Click here](#time-format) for a further documentation on the time format.*
-
-#### Set hours per day
-
-```shell
-gtt report --hours_per_day=6
-```
-
-#### Set columns included in the time record table
-
-```shell
-gtt report --record_columns=user --record_columns=date --record_columns=time
-```
-
-*Note: Available columns to choose from: `user`, `date`, `type`, `iid`, `project_id`, `project_namespace`, `time`*
-
-#### Set columns included in the issue table
-
-```shell
-gtt report --issue_columns=iid --issue_columns=title --issue_columns=time_username
-```
-
-*Note: Available columns to choose from: `id`, `iid`, `title`, `project_id`,
-`project_namespace`, `description`, `labels`, `milestone`, `assignee`, `author`,
-`closed`, `updated_at`, `created_at`, `state`, `spent`, `total_spent`, `total_estimate`*
-
-*You can also include columns that show the total time spent by a specific user
-by following this convention: `time_username`*
-
-#### Set columns included in the merge request table
-
-```shell
-gtt report --merge_request_columns=iid --merge_request_columns=title --merge_request_columns=time_username
-```
-
-*Note: Available columns to choose from: `id`, `iid`, `title`, `project_id`,
-`project_namespace`, `description`, `labels`, `milestone`, `assignee`, `author`,
-`updated_at`, `created_at`, `state`, `spent`, `total_spent`, `total_estimate`*
-
-*You can also include columns that show the total time spent by a specific user
-by following this convention: `time_username`*
-
-#### Add columns for each project member to issue and merge request table, including their total time spent
-
-```shell
-gtt report --user_columns
-```
-
-#### Only include the given labels in the report
-
-```shell
-gtt report --include_labels=pending --include_labels=approved
-```
-
-#### Exclude the given labels from the report
-
-```shell
-gtt report --exclude_labels=bug --exclude_labels=feature
-```
-
-#### Use a proxy server
-
-```shell
-gtt report --proxy="http://localhost:8080"
-```
-
-#### Output verbose debug information
-
-```shell
-gtt report --verbose
-```
-
-## configuration
-
-The configuration uses the [yaml file format](http://www.yaml.org/spec/1.2/spec.html).
-[Click here](#i-configuration) for more information how to edit and create a config file.
-
-### Config File
-
-Here's a sample configuration file including all available options:
-
-```yaml
-# Url to the gitlab api
-# Make sure there's a trailing slash
-# [required]
-url: http://gitlab.com/api/v4/
-
-# GitLab personal api token
-# [required]
-token: abcdefghijklmnopqrst
-
-# Use a proxy server
-# defaults to false
-proxy: http://localhost:8080
-
-# Don't check SSL certificate
-# defaults to false
-insecure: true
-
-# Project
-# defaults to false
-project: namespace/projectname
-
-# Include closed issues and merge requests
-# defaults to false
-closed: true
-
-# Limit to the given milestone
-# defaults to false
-milestone: milestone_name
-
-# Exclude issues and merge requests that have the given labels
-# defaults to an empty array
-excludeByLabels:
-- wont-fix
-- ignore
-
-# Limit issues and merge requests to the given labels
-# defaults to an empty array
-includeByLabels:
-- critical
-- important
-
-# Limit the query to the given data type
-# available: issues, merge_requests
-# defaults to [issues, merge_requests]
-query:
-- issues
-
-# Limit the parts in the final report
-# available: stats, issues, merge_requests, records
-# defaults to [stats, issues, merge_requests, records]
-report:
-- stats
-- records
-
-# Hide headlines in the report
-# defaults to false
-noHeadlines: true
-
-# Hide warnings in the report
-# defaults to false
-noWarnings: true
-
-# Include issues and merge requests in the report that have no time records
-# defaults to false
-showWithoutTimes: true
-
-# Hours per day
-# defaults to 8
-hoursPerDay: 8
-
-# Days per week
-# defaults to 5
-daysPerWeek: 5
-
-# Weeks per month
-# defaults to 4
-weeksPerMonth: 4
-
-# Include the given columns in the issue table
-# See --issue_columns option for more information
-# defaults to iid, title, spent, total_estimate
-issueColumns:
-- iid
-- title
-- total_estimate
-
-# Include the given columns in the merge request table
-# See --merge_request_columns option for more information
-# defaults to iid, title, spent, total_estimate
-mergeRequestColumns:
-- iid
-- title
-- total_estimate
-
-# Include the given columns in the time record table
-# See --record_columns option for more information
-# defaults to user, date, type, iid, time
-recordColumns:
-- user
-- iid
-- time
-
-# Add columns for each project member to issue and
-# merge request table, including their total time spent
-# defaults to true
-userColumns: true
-
-# Date format
-# Click here for format options: http://momentjs.com/docs/#/displaying/format/
-# defaults to DD.MM.YYYY HH:mm:ss
-dateFormat: DD.MM.YYYY HH:mm:ss
-
-# Time format
-# See time format configuration below
-# defaults to "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
-timeFormat: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
-
-# Time format for different parts of the report
-# Instead of specifying one global time format you can specify one for every
-# part of the report and the log command
-timeFormat:
- log: "[%sign][%hours_overall]"
- stats: "[%sign][%days_overall]"
- issues: "[%sign][%hours_overall]"
- merge_requests: "[%sign][%hours_overall]"
- records: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
-
-# Change your timezone
-# default: UTC
-timezone: "Europe/Berlin"
-
-# Output type
-# Available: csv, table, markdown, pdf
-# defaults to table
-output: markdown
-
-# Exclude the given labels from the report
-# defaults to an empty array
-excludeLabels:
-- bug
-- feature
-
-# Only include the given labels in the report
-# defaults to an empty array
-includeLabels:
-- pending
-- approved
-
-# Only works if using a local configuration file!
-# Extend the global configuration if set to true, pass a string to extend
-# the configuration file stored at the given path
-# defaults to true
-extend: true
-
-# Change number of concurrent connections/http queries
-# Note: Handle with care, we don't want to spam GitLabs API too much
-# defaults to 10
-_parallel: 20
-
-# Change rows per page (max. 100)
-# defaults to 100
-_perPage: 100
-
-# Verbose output
-_verbose: false
-
-# Check access token validity up front
-_checkToken: false
-
-# Skip parsing the issue/merge_request description for time records
-_skipDescriptionParsing: false
-```
-
-### Time format
-
-##### `[%sign]`, `[%days]`, `[%hours]`, `[%minutes]`, `[%seconds]`
-
-Prints out the raw data.
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%days]d [%hours]h [%minutes]m [%seconds]s"
-```
-
-**Example outputs:**
-
-```shell
-0d 0h 30m 15s
--1d 10h 15m 0s
-```
-
-##### `[%days>string]`, `[%hours>string]`, `[%minutes>string]`, `[%seconds>string]`
-
-This is a conditional: it prints out the raw data and appends the given string if the
-data is greater than zero.
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%days>d ][%hours>h ][%minutes>m ][%seconds>s]"
-```
-
-**Example outputs:**
-
-```shell
-30m 15s
--1d 10h 15m
-```
-
-##### `[%Days]`, `[%Hours]`, `[%Minutes]`, `[%Seconds]`, `[%Days>string]`, `[%Hours>string]`, `[%Minutes>string]`, `[%Seconds>string]`
-
-First letter uppercase adds leading zeros.
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%Days]:[%Hours]:[%Minutes]:[%Seconds]"
-```
-
-**Example outputs:**
-
-```shell
-00:00:30:15
--01:10:15:00
-```
-
-##### `[%days_overall]`, `[%hours_overall]`, `[%minutes_overall]`, `[%seconds_overall]`
-
-Instead of printing out the second-, minute-, hour-, day-part of the duration this
-prints the complete time in either seconds, minutes, hours or days.
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%minutes_overall]"
-```
-
-**Example outputs:**
-
-```shell
-30.25
-1095
-```
-
-##### `[%days_overall_comma]`, `[%hours_overall_comma]`, `[%minutes_overall_comma]`, `[%seconds_overall_comma]`
-
-Use a comma for float values instead of a point. (Useful for some european countries)
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%minutes_overall]"
-```
-
-**Example outputs:**
-
-```shell
-30,25
-1095
-```
-
-##### `[%hours_overall:2]`, `[%days_overall:3]`
-
-You can ceil any float value by adding the number of decimals to keep separated with a `:`.
-
-**Example config:**
-
-```yaml
-timeFormat: "[%sign][%hours_overall:2]"
-```
-
-**Example outputs:**
-
-```shell
-0,51
-18,25
-```
-
-## how to use gtt as a library
-
-Add as a dependency using yarn:
-
-```shell
-yarn add gitlab-time-tracker
-```
-
-... or using npm:
-
-```shell
-npm install --save gitlab-time-tracker
-```
-
-Use it in your project:
-
-```js
-// require modules
-const Config = require('gitlab-time-tracker/src/include/config');
-const Report = require('gitlab-time-tracker/src/models/report');
-
-// create a default config
-let config = new Config();
-
-// set required parameters
-config.set('token', 'abcdefghijklmnopqrst');
-config.set('project', 'namespace/project');
-
-// create report
-let report = new Report(config);
-
-// query and process data
-try {
- await report.getProject()
- await report.getIssues()
- await report.getMergeRequests()
- await report.processIssues()
- await report.processMergeRequests()
-} catch (error) {
- console.log(error)
-}
-
-// access data on report
-report.issues.forEach(issue => {
- // time records on issue
- console.log(issue.times);
- // time spent of single time record
- console.log(issue.times[0].time);
-});
-report.mergeRequests.forEach(mergeRequest => {
- // time records on merge requests
- console.log(mergeRequest.times);
- // user of single time record
- console.log(mergeRequest.times[0].user);
-});
-```
-
-## dumps
-
-Starting with 1.7.4 gtt can dump the results of all API requests within a report and use it on another machine without access to the GitLab instance itself. This is very useful for debugging purposes. If you stumble upon a bug which could be unique to your set of data, please rerun the report with these options to save a dump to the given file: `--output=dump --file=/path/dump.json` Check your dump for sensitive information and provide it when asked.
-
-## faqs
-
-#### What is the difference between 'total spent' and 'spent'?
-
-`total spent` is the total amount of time spent in all issues after filtering.
-It can include times outside the queried time frame. `spent` on the other hand
-is the total amount of time spent in the given time frame.
-
-## contributing
-
-I would love to integrate unit testing in this project, but unfortunately my knowledge of
-testing in the JavaScript/Node.js world is very limited. (I'm actually a PHP dev)
-So this would be a very helpful thing to contribute but of course all contributions are very welcome.
-
-* Please work in your own branch, e.g. `integrate-awesome-feature`, `fix-awful-bug`, `improve-this-crappy-docs`
-* Create a pull request to the `dev` branch
-
-## buy me a beer
-
-gtt is an open source project, developed and maintained completely in my free time.
-
-If you enjoy using gtt you can support the project by [contributing](#contributing) to the code base,
-sharing it to your colleagues and co-workers or monetarily by [donating via PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DN9YVDKFGC6V6).
-Every type of support is helpful and thank you very much if you consider supporting the project
-or already have done so. 💜
+Please support the development of this free software by [donating or sharing](https://github.com/kriskbx/gitlab-time-tracker/blob/master/documentation.md#support-further-development)!
## license
-GPL v2
+gtt is open-source software licensed under the [GPL V2 license](https://github.com/kriskbx/gitlab-time-tracker/blob/master/LICENSE).
From e84b92538570ecae6f31b3522919fbaeab7b6775 Mon Sep 17 00:00:00 2001
From: kriskbx
Date: Mon, 27 Aug 2018 12:26:04 +0200
Subject: [PATCH 02/52] Add docs link
---
readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.md b/readme.md
index 5d24f99..98dec59 100755
--- a/readme.md
+++ b/readme.md
@@ -16,7 +16,7 @@ gtt is a fully featured command line interface for GitLab's time tracking featur
## documentation
-You can find the documentation [here]().
+You can find the documentation [here](https://github.com/kriskbx/gitlab-time-tracker/blob/master/documentation.md).
## support further development
From 67565ac226000921e6e3eebc2347d93bc5b93974 Mon Sep 17 00:00:00 2001
From: kriskbx
Date: Mon, 27 Aug 2018 12:30:10 +0200
Subject: [PATCH 03/52] Center shields
---
readme.md | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/readme.md b/readme.md
index 98dec59..58eddc2 100755
--- a/readme.md
+++ b/readme.md
@@ -1,18 +1,16 @@

-
-[](https://www.npmjs.com/package/gitlab-time-tracker)
-[](https://www.npmjs.com/package/gitlab-time-tracker)
-[](https://travis-ci.org/kriskbx/gitlab-time-tracker)
-[](https://coveralls.io/github/kriskbx/gitlab-time-tracker)
-[](https://www.npmjs.com/package/gitlab-time-tracker)
-
+
+
+
+
+
## introduction
-gtt is a fully featured command line interface for GitLab's time tracking feature. It monitors the time you spent on an issue or merge request locally and syncs it to GitLab. It also allows you to create reports in various formats from time tracking data stored on GitLab. **Looking for a Graphical User Interface? Check out the [gtt taskbar/menubar app](https://github.com/kriskbx/gitlab-time-tracker-taskbar) for Linux, Mac & Windows!**
+gtt is a fully featured command line interface for GitLab's time tracking feature. It monitors the time you spent on an issue or merge request locally and syncs it to GitLab. It also allows you to create reports in various formats from time tracking data stored on GitLab. **Looking for a graphical user interface? Check out the [gtt taskbar/menubar app](https://github.com/kriskbx/gitlab-time-tracker-taskbar) for Linux, Mac & Windows!**
## documentation
From 40298bf17ef2586d44f5abffab296b4454b04e7a Mon Sep 17 00:00:00 2001
From: kriskbx
Date: Mon, 27 Aug 2018 14:42:10 +0200
Subject: [PATCH 04/52] Add new preview gif
---
preview/demo.gif | Bin 0 -> 1668403 bytes
preview/reports.gif | Bin 2143409 -> 0 bytes
preview/tracking.gif | Bin 5143212 -> 0 bytes
readme.md | 2 ++
4 files changed, 2 insertions(+)
create mode 100644 preview/demo.gif
delete mode 100755 preview/reports.gif
delete mode 100755 preview/tracking.gif
diff --git a/preview/demo.gif b/preview/demo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6904fa15e2bf1c6414308221398977e9f88cb725
GIT binary patch
literal 1668403
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