├── .docker └── linguist │ └── Dockerfile ├── .env ├── .envrc ├── .gitignore ├── CITATION.cff ├── LICENSE ├── README.md ├── compose.yml ├── flake.lock ├── flake.nix ├── gittruckfactor ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jpt.core.prefs │ ├── org.eclipse.ltk.core.refactoring.prefs │ ├── org.eclipse.m2e.core.prefs │ ├── org.eclipse.wst.common.project.facet.core.prefs.xml │ └── org.eclipse.wst.common.project.facet.core.xml ├── bin │ └── META-INF │ │ ├── log4j.xml │ │ └── persistence.xml ├── config.properties ├── pom.xml ├── repo_info │ ├── alias.txt │ ├── filtered-files.txt │ └── modules.txt ├── results │ ├── AndEngine.txt │ ├── CodeMirror.txt │ ├── Faker.txt │ ├── Flashlight.txt │ ├── Ghost.txt │ ├── Leaflet.txt │ ├── Mailpile.txt │ ├── PHP-CS-Fixer.txt │ ├── Ratchet.txt │ ├── RxJava.txt │ ├── Silex.txt │ ├── ThinkUp.txt │ ├── Validation.txt │ ├── WordPress.txt │ ├── ace.txt │ ├── active_merchant.txt │ ├── activeadmin.txt │ ├── ajenti.txt │ ├── android.txt │ ├── androidannotations.txt │ ├── ansible.txt │ ├── assetic.txt │ ├── atom-shell.txt │ ├── backbone.txt │ ├── backup.txt │ ├── beets.txt │ ├── bitcoin.txt │ ├── boto.txt │ ├── bundler.txt │ ├── bup.txt │ ├── caffe.txt │ ├── capnproto.txt │ ├── capybara.txt │ ├── cassandra.txt │ ├── celery.txt │ ├── celluloid.txt │ ├── chef.txt │ ├── clojure.txt │ ├── cocos2d-x.txt │ ├── composer.txt │ ├── cucumber.txt │ ├── d3.txt │ ├── devise.txt │ ├── diaspora.txt │ ├── django-cms.txt │ ├── django-social-auth.txt │ ├── django.txt │ ├── dropwizard.txt │ ├── drupal.txt │ ├── elasticsearch.txt │ ├── ember.js.txt │ ├── express.txt │ ├── factory_girl.txt │ ├── flask.txt │ ├── fnordmetric.txt │ ├── fog.txt │ ├── formtastic.txt │ ├── geocoder.txt │ ├── git.txt │ ├── glide.txt │ ├── gradle.txt │ ├── grunt.txt │ ├── haml.txt │ ├── homebrew-cask.txt │ ├── homebrew.txt │ ├── intellij-community.txt │ ├── io.js.txt │ ├── ion.txt │ ├── ionic.txt │ ├── ipython.txt │ ├── jade.txt │ ├── jedis.txt │ ├── jekyll.txt │ ├── joomla-cms.txt │ ├── jquery-ui.txt │ ├── jquery.txt │ ├── kivy.txt │ ├── less.js.txt │ ├── libgdx.txt │ ├── linguist.txt │ ├── linux.txt │ ├── logstash.txt │ ├── luigi.txt │ ├── meteor.txt │ ├── metrics.txt │ ├── moment.txt │ ├── mongoid.txt │ ├── monolog.txt │ ├── mustache.js.txt │ ├── netty.txt │ ├── node-browserify.txt │ ├── nokogiri.txt │ ├── odoo.txt │ ├── openFrameworks.txt │ ├── openage.txt │ ├── opencv.txt │ ├── osquery.txt │ ├── pandas.txt │ ├── paperclip.txt │ ├── pdf.js.txt │ ├── phabricator.txt │ ├── php-src.txt │ ├── phpunit.txt │ ├── platform_frameworks_base.txt │ ├── powerline.txt │ ├── prawn.txt │ ├── presto.txt │ ├── puphpet.txt │ ├── puppet.txt │ ├── rails.txt │ ├── requirejs.txt │ ├── resque.txt │ ├── rubocop.txt │ ├── ruby.txt │ ├── salt.txt │ ├── sass.txt │ ├── scikit-learn.txt │ ├── sentry.txt │ ├── spring-framework.txt │ ├── sprockets.txt │ ├── thor.txt │ ├── three.js.txt │ ├── thumbor.txt │ ├── tiled.txt │ ├── titan.txt │ ├── twitter.txt │ ├── vagrant.txt │ ├── vowpal_wabbit.txt │ ├── webscalesql-5.6.txt │ ├── wp-cli.txt │ ├── yii2.txt │ └── youtube-dl.txt ├── results_linguist │ ├── AndEngine.txt │ ├── CodeMirror.txt │ ├── Faker.txt │ ├── Flashlight.txt │ ├── Ghost.txt │ ├── Leaflet.txt │ ├── Mailpile.txt │ ├── PHP-CS-Fixer.txt │ ├── Ratchet.txt │ ├── RxJava.txt │ ├── Silex.txt │ ├── ThinkUp.txt │ ├── Validation.txt │ ├── WordPress.txt │ ├── ace.txt │ ├── active_merchant.txt │ ├── activeadmin.txt │ ├── ajenti.txt │ ├── android.txt │ ├── androidannotations.txt │ ├── ansible.txt │ ├── assetic.txt │ ├── atom-shell.txt │ ├── backbone.txt │ ├── backup.txt │ ├── beets.txt │ ├── bitcoin.txt │ ├── boto.txt │ ├── bundler.txt │ ├── bup.txt │ ├── caffe.txt │ ├── capnproto.txt │ ├── capybara.txt │ ├── cassandra.txt │ ├── celery.txt │ ├── celluloid.txt │ ├── chef.txt │ ├── clojure.txt │ ├── cocos2d-x.txt │ ├── composer.txt │ ├── cucumber.txt │ ├── d3.txt │ ├── devise.txt │ ├── diaspora.txt │ ├── django-cms.txt │ ├── django-social-auth.txt │ ├── django.txt │ ├── dropwizard.txt │ ├── drupal.txt │ ├── elasticsearch.txt │ ├── ember.js.txt │ ├── express.txt │ ├── factory_girl.txt │ ├── flask.txt │ ├── fnordmetric.txt │ ├── fog.txt │ ├── formtastic.txt │ ├── geocoder.txt │ ├── git.txt │ ├── glide.txt │ ├── gradle.txt │ ├── grunt.txt │ ├── haml.txt │ ├── homebrew-cask.txt │ ├── homebrew.txt │ ├── intellij-community.txt │ ├── io.js.txt │ ├── ion.txt │ ├── ionic.txt │ ├── ipython.txt │ ├── jade.txt │ ├── jedis.txt │ ├── jekyll.txt │ ├── joomla-cms.txt │ ├── jquery-ui.txt │ ├── jquery.txt │ ├── kivy.txt │ ├── less.js.txt │ ├── libgdx.txt │ ├── linguist.txt │ ├── linux.txt │ ├── logstash.txt │ ├── luigi.txt │ ├── meteor.txt │ ├── metrics.txt │ ├── moment.txt │ ├── mongoid.txt │ ├── monolog.txt │ ├── mustache.js.txt │ ├── netty.txt │ ├── node-browserify.txt │ ├── nokogiri.txt │ ├── odoo.txt │ ├── openFrameworks.txt │ ├── openage.txt │ ├── opencv.txt │ ├── osquery.txt │ ├── pandas.txt │ ├── paperclip.txt │ ├── pdf.js.txt │ ├── phabricator.txt │ ├── php-src.txt │ ├── phpunit.txt │ ├── platform_frameworks_base.txt │ ├── powerline.txt │ ├── prawn.txt │ ├── presto.txt │ ├── puphpet.txt │ ├── puppet.txt │ ├── rails.txt │ ├── requirejs.txt │ ├── resque.txt │ ├── rubocop.txt │ ├── ruby.txt │ ├── salt.txt │ ├── sass.txt │ ├── scikit-learn.txt │ ├── sentry.txt │ ├── spring-framework.txt │ ├── sprockets.txt │ ├── thor.txt │ ├── three.js.txt │ ├── thumbor.txt │ ├── tiled.txt │ ├── titan.txt │ ├── twitter.txt │ ├── vagrant.txt │ ├── vowpal_wabbit.txt │ ├── webscalesql-5.6.txt │ ├── wp-cli.txt │ ├── yii2.txt │ └── youtube-dl.txt ├── scripts │ ├── commit_log_script.sh │ ├── linguist.rb │ ├── linguist_script.sh │ └── log.awk ├── src │ ├── META-INF │ │ └── persistence.xml │ └── aserg │ │ └── gtf │ │ ├── GitTruckFactor.java │ │ ├── GitTruckFactorRepList.java │ │ ├── dao │ │ ├── CommitFileDAO.java │ │ ├── CommitInfoDAO.java │ │ ├── GenericDAO.java │ │ ├── GitRepositoryDAO.java │ │ ├── LogCommitDAO.java │ │ ├── LogCommitFileDAO.java │ │ ├── NewFileInfoDAO.java │ │ ├── PersistThread.java │ │ ├── ProjectInfoDAO.java │ │ └── authorship │ │ │ ├── AuthorshipInfoDAO.java │ │ │ ├── DeveloperAuthorshipInfoDAO.java │ │ │ ├── DeveloperDAO.java │ │ │ ├── FileDAO.java │ │ │ └── RepositoryDAO.java │ │ ├── model │ │ ├── AbstractEntity.java │ │ ├── CommitFileInfo.java │ │ ├── CommitInfo.java │ │ ├── FileType.java │ │ ├── GitRepository.java │ │ ├── LanguageInfo.java │ │ ├── LogCommitFileInfo.java │ │ ├── LogCommitInfo.java │ │ ├── NewFileInfo.java │ │ ├── ProjectInfo.java │ │ ├── ProjectStatus.java │ │ ├── Status.java │ │ └── authorship │ │ │ ├── AuthorshipInfo.java │ │ │ ├── DevStatus.java │ │ │ ├── Developer.java │ │ │ ├── DeveloperAuthorshipInfo.java │ │ │ ├── File.java │ │ │ ├── FileAuthors.java │ │ │ ├── Repository.java │ │ │ └── RepositoryStatus.java │ │ ├── task │ │ ├── AbstractTask.java │ │ ├── AliasHandler.java │ │ ├── DOACalculator.java │ │ ├── NewAliasHandler.java │ │ └── extractor │ │ │ ├── FileInfoExtractor.java │ │ │ ├── GitLogExtractor.java │ │ │ └── LinguistExtractor.java │ │ ├── truckfactor │ │ ├── GreedyTruckFactor.java │ │ ├── PrunedGreedyTruckFactor.java │ │ ├── TFInfo.java │ │ └── TruckFactor.java │ │ └── util │ │ ├── Alias.java │ │ ├── AliasesIdentifier.java │ │ ├── CRLFLineReader.java │ │ ├── ConfigInfo.java │ │ ├── Directory.java │ │ ├── FileDirectory.java │ │ ├── FileInfoReader.java │ │ ├── FormatDoaDistribution.java │ │ └── LineInfo.java └── target │ └── classes │ └── META-INF │ └── persistence.xml └── meta ├── original_results.json ├── output.csv ├── parse_original.py ├── parse_results.py ├── repo_list.txt ├── results.json └── results_linguist.json /.docker/linguist/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2-alpine3.13 2 | 3 | RUN apk --update add --virtual build_deps \ 4 | build-base \ 5 | libc-dev \ 6 | cmake \ 7 | && apk add icu-dev openssl-dev \ 8 | && gem install github-linguist \ 9 | && apk del build_deps \ 10 | && rm /var/cache/apk/* 11 | 12 | CMD ["github-linguist"] -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | REPO_DIR=git -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | maven-repo 2 | cloned_repos 3 | repos 4 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | message: 'If you use this tool in your work, please cite it as below.' 3 | authors: 4 | - given-names: Guilherme 5 | family-names: Avelino 6 | email: gaa@ufpi.edu.br 7 | affiliation: UFPI 8 | orcid: 'https://orcid.org/0000-0002-8203-0638' 9 | - given-names: Marco Tulio 10 | family-names: Valente 11 | email: mtvalente@gmail.com 12 | affiliation: UFMG 13 | orcid: 'https://orcid.org/0000-0002-8180-7548' 14 | title: 'A Tool for Estimating Truck-Factors' 15 | version: '1.2' 16 | date-released: '2018-04-12' 17 | url: 'https://github.com/aserg-ufmg/Truck-Facto' 18 | keywords: 19 | - truck factor 20 | - bus fctor 21 | - github 22 | - knowledge concentration 23 | preferred-citation: 24 | type: conference-paper 25 | message: 'If you use this tool in your work, please cite it as below.' 26 | authors: 27 | - given-names: Guilherme 28 | family-names: Avelino 29 | email: gaa@ufpi.edu.br 30 | affiliation: Federal University of Piaui (UFPI) 31 | orcid: 'https://orcid.org/0000-0002-8203-0638' 32 | - given-names: Leonardo Passos 33 | family-names: Passos 34 | email: lpassos@gsd.uwaterloo.ca 35 | affiliation: University of Waterloo 36 | orcid: 'https://orcid.org/0000-0001-6591-993X' 37 | - given-names: Andre Hora 38 | family-names: Hora 39 | email: hora@dcc.ufmg.br 40 | affiliation: Federal University of Minas Gerais (UFMG) 41 | orcid: 'https://orcid.org/0000-0003-4900-1330' 42 | - given-names: Marco Tulio 43 | family-names: Valente 44 | email: mtov@dcc.ufmg.br 45 | affiliation: Federal University of Minas Gerais (UFMG) 46 | orcid: 'https://orcid.org/0000-0002-8180-7548' 47 | doi: "10.1109/ICPC.2016.7503718" 48 | collection-title: "24th International Conference on Program Comprehension (ICPC'16)" 49 | pages: 10 50 | start: 1 # First page number 51 | end: 10 # Last page number 52 | title: "A novel approach for estimating Truck Factors" 53 | year: 2016 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Applied Software Engineering Research Group 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Truck-Factor 2 | 3 | This is a tool for estimating the Truck Factor of GitHub projects, using information from commit history. Truck Factor (also known as Bus Factor or Lottery Number) is the minimal number of developers that have to be hit by a truck (or leave) before a project is incapacitated. 4 | 5 | ## Environment 6 | 7 | The scripts for extract commit information from git repositories are implemented using Shell and AWK. So, the execution environment must support those script languages. Optionally, the Ruby interpreter is required if you decide to use the Linguist library to automatically discard files like documentation and third-party libraries. See the specific Linguist requirements in [linguist page](https://github.com/github/linguist). 8 | 9 | > [!NOTE] 10 | > To use docker you can change the `git_repository_path` in `.env` file. 11 | 12 | ## Usage 13 | 14 | Get the last version of the [truckfactor-tool](https://github.com/mtov/Truck-Factor/releases) 15 | 16 | To run the tool to perform these steps: 17 | 18 | 1. Clone the repository to be analysed. 19 | - example: ```git clone https://github.com/mtov/Truck-Factor.git``` 20 | 21 | 2. Build the necessary Java code. 22 | - commands: ```cd Truck-Factor/gittruckfactor; mvn package``` 23 | - docker: ```cd Truck-Factor/gittruckfactor; docker compose jar``` 24 | 25 | 2. Execute the scripts to extract information from the git repository to be analyzed: 26 | 1. Extract commit and file information. 27 | - command: ```./scripts/commit_log_script.sh ``` 28 | - example: ```./scripts/commit_log_script.sh git/Truck-Factor``` 29 | - docker: ```docker compose commit_info``` 30 | 31 | 32 | 2. Extract files to be discard using Linguist library (Optional) 33 | - command: ```./scripts/linguist_script.sh ``` 34 | - example: ```./scripts/linguist_script.sh git/Truck-Factor``` 35 | - docker: ```docker compose linguist``` 36 | 37 | 3. Execute the gittruckfactor tool. 38 | - command: ```java –jar gittruckfactor-1.0.jar ``` 39 | - example: ```java –jar gittruckfactor-1.0.jar git/Truck-Factor aserg-ufmg/Truck-Factor``` 40 | - docker: ```docker compose execute``` 41 | 42 | ## Optional Settings 43 | 44 | Repository specifc information can be provided using the files in the folder `repo_info`, which can improve the TF calculation results. The additional information supported are: 45 | 46 | * Filtered files (`filtered-files.txt`): set files that must be discard before start the TF calculation. 47 | * Info pattern: `;;` 48 | * Aliases (`alias.txt`): set developers aliases. 49 | * Info pattern: `;;` 50 | * Modules (`modules.txt`): map files to modules. 51 | * Info pattern: `;;` 52 | * * Module calculation not implemented yet. 53 | 54 | ### Run-time settings 55 | Algorithm's variables can be set by modifying the `config.properties `file. 56 | 57 | ## Example 58 | 59 | Here are the TF values as estimated by this tool for some popular GitHub projects (using data from November, 2016): 60 | 61 | * FreeCodeCamp: 1 62 | * Bootstrap: 3 63 | * D3: 1 64 | * React: 4 65 | * AngularJS: 6 66 | * Font-Awesome: 1 67 | * jquery: 4 68 | * electron: 1 69 | * tensorflow: 2 70 | * docker: 13 71 | * meteor: 5 72 | * swift: 5 73 | * vue: 1 74 | * rails: 11 75 | * atom: 4 76 | 77 | ## More Info 78 | 79 | Guilherme Avelino, Leonardo Passos, Andre Hora, Marco Tulio Valente. [A Novel Approach for Estimating Truck Factors](https://arxiv.org/abs/1604.06766). In 24th International Conference on Program Comprehension (ICPC), pages 1-10, 2016. 80 | -------------------------------------------------------------------------------- /compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | linguist: 3 | build: ./.docker/linguist 4 | command: sh -c "ruby repo/gittruckfactor/scripts/linguist.rb repo/$REPO_DIR > ./repo/$REPO_DIR/linguistfiles.log" 5 | env_file: .env 6 | volumes: 7 | - .:/repo 8 | commit_info: 9 | image: bitnami/git 10 | command: 11 | - bin/sh 12 | - -c 13 | - | 14 | echo "Hola" 15 | 16 | cd repo/gittruckfactor/scripts 17 | sh ./commit_log_script.sh /repo/$REPO_DIR repo/gittruckfactor/scripts 18 | volumes: 19 | - .:/repo 20 | jar: 21 | image: maven:3.3-jdk-8 22 | command: sh -c "cd /repo && mvn package" 23 | volumes: 24 | - ./gittruckfactor:/repo 25 | - ./maven-repo:/root/.m2 26 | execute: 27 | image: maven:3.3-jdk-8 28 | command: 29 | - bin/sh 30 | - -c 31 | - | 32 | ls 33 | echo "$JAVA_HOME" 34 | java -Dlog4j.configuration=file:///repo/gittruckfactor/target/log4j.xml -jar ./repo/gittruckfactor/target/gittruckfactor-1.0.jar repo/git aserg-ufmg/Truck-Factor 35 | volumes: 36 | - .:/repo 37 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1728018373, 6 | "narHash": "sha256-NOiTvBbRLIOe5F6RbHaAh6++BNjsb149fGZd1T4+KBg=", 7 | "rev": "bc947f541ae55e999ffdb4013441347d83b00feb", 8 | "revCount": 688563, 9 | "type": "tarball", 10 | "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.688563%2Brev-bc947f541ae55e999ffdb4013441347d83b00feb/01925b66-3b70-71bd-b277-924a6c208ba7/source.tar.gz" 11 | }, 12 | "original": { 13 | "type": "tarball", 14 | "url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.%2A.tar.gz" 15 | } 16 | }, 17 | "root": { 18 | "inputs": { 19 | "nixpkgs": "nixpkgs" 20 | } 21 | } 22 | }, 23 | "root": "root", 24 | "version": 7 25 | } 26 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "A Nix-flake-based Java development environment"; 3 | 4 | inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz"; 5 | 6 | outputs = { self, nixpkgs }: 7 | let 8 | javaVersion = 22; # Change this value to update the whole stack 9 | 10 | supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; 11 | forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { 12 | pkgs = import nixpkgs { inherit system; overlays = [ self.overlays.default ]; }; 13 | }); 14 | in 15 | { 16 | overlays.default = 17 | final: prev: rec { 18 | jdk = prev."jdk${toString javaVersion}"; 19 | maven = prev.maven.override { jdk_headless = jdk; }; 20 | gradle = prev.gradle.override { java = jdk; }; 21 | }; 22 | 23 | devShells = forEachSupportedSystem ({ pkgs }: { 24 | default = pkgs.mkShell { 25 | packages = with pkgs; [ 26 | gcc 27 | gradle 28 | jdk 29 | maven 30 | ncurses 31 | patchelf 32 | zlib 33 | docker 34 | docker-compose 35 | ruby_3_2 36 | rubyPackages_3_2.rugged 37 | ]; 38 | }; 39 | }); 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /gittruckfactor/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /gittruckfactor/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /gittruckfactor/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | gittruckfactor 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.wst.common.project.facet.core.builder 10 | 11 | 12 | 13 | 14 | org.eclipse.jdt.core.javabuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.wst.validation.validationbuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.m2e.core.maven2Builder 25 | 26 | 27 | 28 | 29 | 30 | org.eclipse.m2e.core.maven2Nature 31 | org.eclipse.jdt.core.javanature 32 | org.eclipse.wst.common.project.facet.core.nature 33 | 34 | 35 | -------------------------------------------------------------------------------- /gittruckfactor/.settings/org.eclipse.jpt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jpt.core.platform=eclipselink2_4 3 | org.eclipse.jpt.jpa.core.discoverAnnotatedClasses=true 4 | -------------------------------------------------------------------------------- /gittruckfactor/.settings/org.eclipse.ltk.core.refactoring.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false 3 | -------------------------------------------------------------------------------- /gittruckfactor/.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /gittruckfactor/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/bin/META-INF/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | -------------------------------------------------------------------------------- /gittruckfactor/bin/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.eclipse.persistence.jpa.PersistenceProvider 9 | 10 | gaa.model.ProjectInfo 11 | gaa.model.LanguageInfo 12 | gaa.model.NewFileInfo 13 | gaa.model.LogCommitInfo 14 | gaa.model.LogCommitFileInfo 15 | gaa.authorship.model.Repository 16 | gaa.authorship.model.Developer 17 | gaa.authorship.model.File 18 | gaa.authorship.model.AuthorshipInfo 19 | gaa.authorship.model.DeveloperAuthorshipInfo 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /gittruckfactor/config.properties: -------------------------------------------------------------------------------- 1 | normalizedDOA=0.75 2 | absoluteDOA=3.293 3 | tfCoverage=0.5 4 | minPercentage=0.1 -------------------------------------------------------------------------------- /gittruckfactor/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | gaa 6 | 1.0 7 | 8 | src 9 | 10 | 11 | maven-compiler-plugin 12 | 3.1 13 | 14 | 15 | 16 | aserg.gtf.GitTruckFactor 17 | 18 | 19 | 1.8 20 | 1.8 21 | 22 | 23 | 24 | org.apache.maven.plugins 25 | maven-dependency-plugin 26 | 27 | 28 | copy-dependencies 29 | prepare-package 30 | 31 | copy-dependencies 32 | 33 | 34 | ${project.build.directory}/lib 35 | false 36 | false 37 | true 38 | 39 | 40 | 41 | 42 | 43 | org.apache.maven.plugins 44 | maven-jar-plugin 45 | 46 | 47 | 48 | true 49 | lib/ 50 | aserg.gtf.GitTruckFactor 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | src 59 | 60 | **/*.java 61 | 62 | 63 | 64 | 65 | 66 | 67 | mysql 68 | mysql-connector-java 69 | 5.1.32 70 | 71 | 72 | org.eclipse.persistence 73 | eclipselink 74 | 2.5.2 75 | 76 | 77 | org.postgresql 78 | postgresql 79 | 9.3-1100-jdbc41 80 | 81 | 82 | junit 83 | junit 84 | 3.8.1 85 | test 86 | 87 | 88 | org.eclipse.jgit 89 | org.eclipse.jgit 90 | 1.3.0.201202151440-r 91 | 92 | 93 | com.jcabi 94 | jcabi-github 95 | 0.23 96 | 97 | 98 | log4j 99 | log4j 100 | 1.2.17 101 | 102 | 103 | com.google.guava 104 | guava 105 | 18.0 106 | 107 | 108 | gittruckfactor 109 | 110 | -------------------------------------------------------------------------------- /gittruckfactor/repo_info/alias.txt: -------------------------------------------------------------------------------- 1 | ####### List of user name aliases ####### 2 | #git_repository_name;user_name;user_alias_name -------------------------------------------------------------------------------- /gittruckfactor/repo_info/filtered-files.txt: -------------------------------------------------------------------------------- 1 | ####### List of files to discard ####### 2 | #git_repository_name;file_path;filter_info -------------------------------------------------------------------------------- /gittruckfactor/repo_info/modules.txt: -------------------------------------------------------------------------------- 1 | ####### Module map (module,file) ####### 2 | #git_repository_name;file_path;subsystem -------------------------------------------------------------------------------- /gittruckfactor/results/AndEngine.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 7.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Nicolas Gramlich;631;99.84 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/CodeMirror.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 47.86%) 2 | TF authors (Developer;Files;Percentage): 3 | Marijn Haverbeke;478;81.71 4 | Adrian Heine;62;10.60 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/Faker.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 49.42%) 2 | TF authors (Developer;Files;Percentage): 3 | Francois Zaninotto;79;13.19 4 | Andreas Moller;60;10.02 5 | John Was;35;5.84 6 | r3h6;30;5.01 7 | Owen Kieffer-Jones;18;3.01 8 | Juha Remes;12;2.00 9 | Hugo Fonseca;11;1.84 10 | Yerlen Zhubangaliyev;10;1.67 11 | Tz-Huan Huang;10;1.67 12 | ppelgrims;9;1.50 13 | Bernhard Essl;9;1.50 14 | Roman 'pomaxa' Shvets;8;1.34 15 | andela-celisha-wigwe;8;1.34 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results/Flashlight.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 40.32%) 2 | TF authors (Developer;Files;Percentage): 3 | nate-parrott;1783;64.14 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/Ghost.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 42.75%) 2 | TF authors (Developer;Files;Percentage): 3 | Kevin Ansfield;1046;16.92 4 | Simon Backx;705;11.40 5 | Hannah Wolfe;687;11.11 6 | Daniel Lockyer;655;10.60 7 | Fabien O'Carroll;631;10.21 8 | Peter Zimon;590;9.54 9 | Naz;567;9.17 10 | Rishabh;525;8.49 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/Leaflet.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 45.71%) 2 | TF authors (Developer;Files;Percentage): 3 | Florian Bischof;507;50.60 4 | Valerio Bozzolan;187;18.66 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/Mailpile.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 24.23%) 2 | TF authors (Developer;Files;Percentage): 3 | Bjarni R. Einarsson;522;62.00 4 | Brennan Novak;300;35.63 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/PHP-CS-Fixer.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 35.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Dariusz Ruminski;928;44.19 4 | SpacePossum;565;26.90 5 | Kuba Werłos;452;21.52 6 | Julien Falque;341;16.24 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/Ratchet.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 7.69%) 2 | TF authors (Developer;Files;Percentage): 3 | Chris Boden;76;97.44 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/RxJava.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 17.50%) 2 | TF authors (Developer;Files;Percentage): 3 | David Karnok;1883;96.07 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/Silex.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 41.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Fabien Potencier;147;88.55 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/ThinkUp.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 48.73%) 2 | TF authors (Developer;Files;Percentage): 3 | Gina Trapani;1327;79.94 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/Validation.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 40.69%) 2 | TF authors (Developer;Files;Percentage): 3 | Henrique Moody;818;78.88 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/WordPress.txt: -------------------------------------------------------------------------------- 1 | TF = 9 (coverage = 49.79%) 2 | TF authors (Developer;Files;Percentage): 3 | Andrew Ozz;683;15.33 4 | desrosj;664;14.90 5 | gziolo;661;14.84 6 | Sergey Biryukov;647;14.52 7 | ryan;346;7.77 8 | audrasjb;342;7.68 9 | youknowriad;307;6.89 10 | Peter Wilson;281;6.31 11 | Gary Pendergast;182;4.09 12 | 13 | -------------------------------------------------------------------------------- /gittruckfactor/results/ace.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 49.93%) 2 | TF authors (Developer;Files;Percentage): 3 | nightwing;994;66.18 4 | Fabian Jakobs;229;15.25 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/active_merchant.txt: -------------------------------------------------------------------------------- 1 | TF = 12 (coverage = 49.29%) 2 | TF authors (Developer;Files;Percentage): 3 | leila-alderman;173;20.45 4 | codyfauser;158;18.68 5 | Benjamin Pollack;91;10.76 6 | Nathaniel Talbott;73;8.63 7 | Duff OMelia;47;5.56 8 | Alma Malambo;35;4.14 9 | David Santoso;34;4.02 10 | David Perry;28;3.31 11 | Sanjay Chakrapani;26;3.07 12 | Mark Bennett;25;2.96 13 | Cody Fauser;24;2.84 14 | cristian;23;2.72 15 | 16 | -------------------------------------------------------------------------------- /gittruckfactor/results/activeadmin.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 45.71%) 2 | TF authors (Developer;Files;Percentage): 3 | Greg Bell;184;35.05 4 | David Rodriguez;158;30.10 5 | Javier Julio;127;24.19 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results/ajenti.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 5.75%) 2 | TF authors (Developer;Files;Percentage): 3 | Eugeny Pankov;540;96.95 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/android.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 31.09%) 2 | TF authors (Developer;Files;Percentage): 3 | Henrik;438;51.77 4 | Kevin Sawicki;268;31.68 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/androidannotations.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 39.88%) 2 | TF authors (Developer;Files;Percentage): 3 | WonderCsabo;763;67.46 4 | Pierre-Yves Ricau;276;24.40 5 | yDelouis;223;19.72 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results/ansible.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 49.92%) 2 | TF authors (Developer;Files;Percentage): 3 | Matt Clay;2009;39.61 4 | Brian Coca;646;12.74 5 | Matt Martz;418;8.24 6 | Jordan Borean;339;6.68 7 | Toshio Kuratomi;297;5.86 8 | Sloane Hertel;287;5.66 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/assetic.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 37.68%) 2 | TF authors (Developer;Files;Percentage): 3 | Kris Wallsmith;211;74.30 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/atom-shell.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 48.43%) 2 | TF authors (Developer;Files;Percentage): 3 | Cheng Zhao;531;20.57 4 | Samuel Attard;442;17.13 5 | Jeremy Apthorp;370;14.34 6 | electron-roller[bot];300;11.62 7 | Milan Burda;277;10.73 8 | Shelley Vohr;235;9.10 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/backbone.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 39.84%) 2 | TF authors (Developer;Files;Percentage): 3 | Jeremy Ashkenas;58;47.15 4 | Patrick Kettner;40;32.52 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/backup.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 43.26%) 2 | TF authors (Developer;Files;Percentage): 3 | Brian D. Burns;201;71.28 4 | Michael van Rooijen;94;33.33 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/beets.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Adrian Sampson;173;40.71 4 | Sarunas Nejus;50;11.76 5 | Thomas Scholtes;39;9.18 6 | Fabrice Laporte;24;5.65 7 | adrian.sampson;19;4.47 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/bitcoin.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 47.91%) 2 | TF authors (Developer;Files;Percentage): 3 | MarcoFalke;1242;52.34 4 | Wladimir J. van der Laan;391;16.48 5 | Pieter Wuille;218;9.19 6 | Jonas Schnelli;126;5.31 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/boto.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 48.01%) 2 | TF authors (Developer;Files;Percentage): 3 | Daniel Lindsley;158;16.56 4 | Mitch.Garnaat;152;15.93 5 | Mitch Garnaat;143;14.99 6 | James Saryerwinnie;111;11.64 7 | Daniel G. Taylor;96;10.06 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/bundler.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 29.43%) 2 | TF authors (Developer;Files;Percentage): 3 | David Rodriguez;870;66.51 4 | Samuel Giddins;857;65.52 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/bup.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 43.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Rob Browning;239;81.57 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/caffe.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 46.65%) 2 | TF authors (Developer;Files;Percentage): 3 | Evan Shelhamer;216;30.81 4 | Jeff Donahue;136;19.40 5 | Yangqing Jia;82;11.70 6 | Jonathan R. Williford;61;8.70 7 | Sergey Karayev;50;7.13 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/capnproto.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 16.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Kenton Varda;434;88.57 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/capybara.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 34.20%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas Walpole;324;93.91 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/cassandra.txt: -------------------------------------------------------------------------------- 1 | TF = 10 (coverage = 48.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Benedict Elliott Smith;784;11.76 4 | Lorina Poland;664;9.96 5 | Sam Tunnicliffe;460;6.90 6 | Sylvain Lebresne;422;6.33 7 | Mike Adamson;413;6.20 8 | Jacek Lewandowski;403;6.05 9 | Jonathan Ellis;399;5.99 10 | Branimir Lambov;299;4.49 11 | Alex Petrov;275;4.13 12 | David Capwell;244;3.66 13 | 14 | -------------------------------------------------------------------------------- /gittruckfactor/results/celery.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 34.17%) 2 | TF authors (Developer;Files;Percentage): 3 | Ask Solem;576;72.64 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/celluloid.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 33.72%) 2 | TF authors (Developer;Files;Percentage): 3 | Tony Arcieri;97;56.40 4 | //de;92;53.49 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/chef.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 49.82%) 2 | TF authors (Developer;Files;Percentage): 3 | Lamont Granquist;1090;30.07 4 | mwrock;624;17.21 5 | Daniel DeLeo;433;11.94 6 | Tim Smith;421;11.61 7 | Marc A. Paradise;415;11.45 8 | Mike Dodge;279;7.70 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/clojure.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 42.94%) 2 | TF authors (Developer;Files;Percentage): 3 | Rich Hickey;158;45.53 4 | Alex Miller;77;22.19 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/cocos2d-x.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 45.57%) 2 | TF authors (Developer;Files;Percentage): 3 | James Chen;1561;36.67 4 | minggo;512;12.03 5 | yangxiao;425;9.98 6 | zhangbin;363;8.53 7 | Ricardo Quesada;291;6.84 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/composer.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 47.54%) 2 | TF authors (Developer;Files;Percentage): 3 | Jordi Boggiano;774;77.79 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/cucumber.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 33.33%) 2 | TF authors (Developer;Files;Percentage): 3 | Matt Wynne;2;66.67 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/d3.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 33.14%) 2 | TF authors (Developer;Files;Percentage): 3 | Mike Bostock;171;97.71 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/devise.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.07%) 2 | TF authors (Developer;Files;Percentage): 3 | Jose Valim;160;58.61 4 | Carlos Antonio da Silva;77;28.21 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/diaspora.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 49.42%) 2 | TF authors (Developer;Files;Percentage): 3 | Jonne Haß;386;19.43 4 | Benjamin Neff;383;19.28 5 | Steffen van Bergerem;318;16.00 6 | danielgrippi;263;13.24 7 | maxwell;172;8.66 8 | cmrd Senya;131;6.59 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/django-cms.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 46.30%) 2 | TF authors (Developer;Files;Percentage): 3 | Patrick Lauber;455;27.58 4 | Jonas Obrist;240;14.55 5 | Vadim Sikora;209;12.67 6 | Fabian Braun;204;12.36 7 | Iacopo Spalletti;183;11.09 8 | Paulo;161;9.76 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/django-social-auth.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 49.73%) 2 | TF authors (Developer;Files;Percentage): 3 | Matias Aguirre;149;81.42 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/django.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 49.96%) 2 | TF authors (Developer;Files;Percentage): 3 | Claude Paroz;2624;38.36 4 | Jannis Leidel;1893;27.67 5 | Tim Graham;654;9.56 6 | Russell Keith-Magee;445;6.50 7 | Mariusz Felisiak;368;5.38 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/dropwizard.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 48.11%) 2 | TF authors (Developer;Files;Percentage): 3 | Jochen Schalanda;341;26.81 4 | Coda Hale;325;25.55 5 | Artem Prigoda;201;15.80 6 | Steffen Nießing;126;9.91 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/drupal.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 48.23%) 2 | TF authors (Developer;Files;Percentage): 3 | Alex Pott;9233;49.91 4 | Nathaniel Catchpole;8081;43.69 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/elasticsearch.txt: -------------------------------------------------------------------------------- 1 | TF = 33 (coverage = 49.53%) 2 | TF authors (Developer;Files;Percentage): 3 | Nik Everett;3049;9.56 4 | Mark Vieira;2059;6.46 5 | Ryan Ernst;1897;5.95 6 | Costin Leau;1269;3.98 7 | kimchy;1156;3.62 8 | Benjamin Trent;935;2.93 9 | Martijn van Groningen;911;2.86 10 | David Turner;833;2.61 11 | Simon Willnauer;798;2.50 12 | Tim Vernum;768;2.41 13 | Rene Groeschke;711;2.23 14 | Colin Goodheart-Smithe;650;2.04 15 | James Rodewig;631;1.98 16 | Dimitris Athanasiou;603;1.89 17 | Luca Cavanna;588;1.84 18 | Armin Braun;585;1.83 19 | Jason Tedor;553;1.73 20 | Igor Motov;545;1.71 21 | Ioannis Kakavas;535;1.68 22 | uboness;528;1.66 23 | Jack Conradson;508;1.59 24 | Jake Landis;491;1.54 25 | David Kyle;469;1.47 26 | Ignacio Vera;469;1.47 27 | Yang Wang;464;1.46 28 | Lee Hinman;460;1.44 29 | tlrx;455;1.43 30 | Adrien Grand;451;1.41 31 | Clinton Gormley;441;1.38 32 | Nhat Nguyen;420;1.32 33 | David Roberts;419;1.31 34 | Chris Hegarty;381;1.19 35 | David Pilato;373;1.17 36 | 37 | -------------------------------------------------------------------------------- /gittruckfactor/results/ember.js.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 49.50%) 2 | TF authors (Developer;Files;Percentage): 3 | Robert Jackson;381;29.38 4 | Peter Wagenet;219;16.89 5 | Chris Krycho;125;9.64 6 | Chris Garrett;120;9.25 7 | Tobias Bieniek;106;8.17 8 | Edward Faulkner;104;8.02 9 | Chad Hietala;73;5.63 10 | Jean du Plessis;73;5.63 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/express.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 28.31%) 2 | TF authors (Developer;Files;Percentage): 3 | Tj Holowaychuk;128;58.45 4 | Douglas Christopher Wilson;94;42.92 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/factory_girl.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 45.39%) 2 | TF authors (Developer;Files;Percentage): 3 | Josh Clayton;109;40.22 4 | Mike Burns;100;36.90 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/flask.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 20.48%) 2 | TF authors (Developer;Files;Percentage): 3 | David Lord;182;73.09 4 | Armin Ronacher;94;37.75 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/fnordmetric.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 0.14%) 2 | TF authors (Developer;Files;Percentage): 3 | Paul Asmuth;697;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/fog.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 46.52%) 2 | TF authors (Developer;Files;Percentage): 3 | Paul Thornthwaite;241;23.31 4 | Nick Osborn;202;19.54 5 | Wesley Beary;143;13.83 6 | Rodrigo Estebanez;82;7.93 7 | Kaloyan Kanev;70;6.77 8 | Decklin Foster;64;6.19 9 | Lincoln Stoll;52;5.03 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results/formtastic.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 41.38%) 2 | TF authors (Developer;Files;Percentage): 3 | Justin French;128;73.56 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/geocoder.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 49.38%) 2 | TF authors (Developer;Files;Percentage): 3 | Alex Reisner;180;37.04 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/git.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 49.17%) 2 | TF authors (Developer;Files;Percentage): 3 | Junio C Hamano;1222;27.77 4 | Jeff King;479;10.88 5 | Johannes Schindelin;314;7.13 6 | Nguyen Thai Ngoc Duy;206;4.68 7 | Ævar Arnfjorð Bjarmason;199;4.52 8 | Elijah Newren;184;4.18 9 | Eric Sunshine;172;3.91 10 | Patrick Steinhardt;123;2.79 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/glide.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 9.17%) 2 | TF authors (Developer;Files;Percentage): 3 | Sam Judd;1178;97.27 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/gradle.txt: -------------------------------------------------------------------------------- 1 | TF = 12 (coverage = 47.85%) 2 | TF authors (Developer;Files;Percentage): 3 | Adam Murdoch;5787;23.30 4 | Laura Kassovic;1832;7.38 5 | Lorant Pinter;1633;6.58 6 | Daz DeBoer;1586;6.39 7 | Cedric Champeau;1478;5.95 8 | Paul Merlin;1354;5.45 9 | Jendrik Johannes;1226;4.94 10 | Donat Csikos;1172;4.72 11 | Tom Tresansky;1144;4.61 12 | Luke Daley;1097;4.42 13 | Gary Hale;1084;4.36 14 | Stefan Wolf;1025;4.13 15 | 16 | -------------------------------------------------------------------------------- /gittruckfactor/results/grunt.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 26.51%) 2 | TF authors (Developer;Files;Percentage): 3 | Ben Alman;64;77.11 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/haml.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 42.11%) 2 | TF authors (Developer;Files;Percentage): 3 | Takashi Kokubun;187;89.47 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/homebrew-cask.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 49.83%) 2 | TF authors (Developer;Files;Percentage): 3 | Patrick Linnane;1938;26.82 4 | Bevan Kay;658;9.11 5 | Miccal Matthews;574;7.94 6 | BrewTestBot;531;7.35 7 | Randall;509;7.04 8 | Vitor Galvao;339;4.69 9 | Roland Walker;308;4.26 10 | Justin Krehel;293;4.06 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/homebrew.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 0.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Max Howell;1;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/intellij-community.txt: -------------------------------------------------------------------------------- 1 | TF = 31 (coverage = 49.60%) 2 | TF authors (Developer;Files;Percentage): 3 | Anna Kozlova;19523;8.37 4 | Tagir Valeev;12558;5.38 5 | Alexey Sedunov;11461;4.91 6 | Dmitry Jemerov;11002;4.72 7 | Dmitry Gridin;9956;4.27 8 | Toshiaki Kameyama;7436;3.19 9 | Yan Zhulanow;7088;3.04 10 | Valentin Kipyatkov;5944;2.55 11 | Alexey Kudravtsev;5931;2.54 12 | Bas Leijdekkers;5580;2.39 13 | Mikhail Golubev;5568;2.39 14 | peter;5457;2.34 15 | Maxim Shafirov;5321;2.28 16 | Vladimir Krivosheev;4551;1.95 17 | Semyon Proshev;4191;1.80 18 | nik;4066;1.74 19 | Ilya Kirillov;3771;1.62 20 | Alexey Belkov;3721;1.59 21 | Vladimir Dolzhenko;3428;1.47 22 | Roman Shevchenko;3416;1.46 23 | Mikhail Glukhikh;3379;1.45 24 | Daniil Ovchinnikov;3367;1.44 25 | andrey.matveev;3329;1.43 26 | Rustam Vishnyakov;3191;1.37 27 | Max Medvedev;3125;1.34 28 | Bart van Helvert;2897;1.24 29 | Dmitriy.Panov;2721;1.17 30 | Mikhail Pyltsin;2635;1.13 31 | Aleksei.Cherepanov;2513;1.08 32 | Dmitry Avdeev;2501;1.07 33 | Konstantin Bulenkov;2423;1.04 34 | 35 | -------------------------------------------------------------------------------- /gittruckfactor/results/io.js.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 48.79%) 2 | TF authors (Developer;Files;Percentage): 3 | Michael Zasso;15645;36.88 4 | Daniel Bevenius;4971;11.72 5 | Ben Noordhuis;2881;6.79 6 | Ryan Dahl;2325;5.48 7 | npm team;2028;4.78 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/ion.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 1.50%) 2 | TF authors (Developer;Files;Percentage): 3 | Koushik Dutta;198;99.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/ionic.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 41.58%) 2 | TF authors (Developer;Files;Percentage): 3 | Liam DeBeasi;6764;78.16 4 | Sean Perkins;1346;15.55 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/ipython.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 47.04%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas Kluyver;147;27.22 4 | Matthias Bussonnier;139;25.74 5 | Fernando Perez;123;22.78 6 | Brian E. Granger;117;21.67 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/jade.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 49.35%) 2 | TF authors (Developer;Files;Percentage): 3 | Forbes Lindesay;809;88.13 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/jedis.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 42.28%) 2 | TF authors (Developer;Files;Percentage): 3 | M Sazzadul Hoque;556;67.56 4 | Gabriel Erzse;99;12.03 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/jekyll.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 46.07%) 2 | TF authors (Developer;Files;Percentage): 3 | Parker Moore;303;37.22 4 | Ashwin Maroli;143;17.57 5 | Frank Taillandier;74;9.09 6 | Mike Neumegen;49;6.02 7 | Tom Preston-Werner;42;5.16 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/joomla-cms.txt: -------------------------------------------------------------------------------- 1 | TF = 14 (coverage = 47.56%) 2 | TF authors (Developer;Files;Percentage): 3 | Allon Moritz;801;14.38 4 | infograf768;750;13.46 5 | Dimitris Grammatikogiannis;502;9.01 6 | Brian Teeman;475;8.53 7 | eddieajau;443;7.95 8 | Michael Babker;370;6.64 9 | Rob Schley;367;6.59 10 | George Wilson;336;6.03 11 | Fedir Zinchuk;291;5.22 12 | Hannes Papenberg;257;4.61 13 | Lodder;232;4.17 14 | Harald Leithner;203;3.64 15 | Johan Janssens;195;3.50 16 | Nicholas K. Dionysopoulos;177;3.18 17 | 18 | -------------------------------------------------------------------------------- /gittruckfactor/results/jquery-ui.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 40.92%) 2 | TF authors (Developer;Files;Percentage): 3 | Scott Gonzalez;359;50.14 4 | Richard Worth;189;26.40 5 | Michał Gołebiowski-Owczarek;94;13.13 6 | Jorn Zaefferer;90;12.57 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/jquery.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 37.26%) 2 | TF authors (Developer;Files;Percentage): 3 | Michał Gołebiowski-Owczarek;210;57.53 4 | Timmy Willison;133;36.44 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/kivy.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 44.19%) 2 | TF authors (Developer;Files;Percentage): 3 | Mathieu Virbel;620;52.59 4 | Akshay Arora;213;18.07 5 | Matt Einhorn;115;9.75 6 | dessant;90;7.63 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/less.js.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 37.23%) 2 | TF authors (Developer;Files;Percentage): 3 | Matthew Dean;563;76.49 4 | Luke Page;301;40.90 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/libgdx.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 42.78%) 2 | TF authors (Developer;Files;Percentage): 3 | Xoppa;1251;32.91 4 | badlogicgames;1162;30.57 5 | Tomski;359;9.44 6 | SimonIT;298;7.84 7 | sterwill@tinfig.com;279;7.34 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/linguist.txt: -------------------------------------------------------------------------------- 1 | TF = 9 (coverage = 49.62%) 2 | TF authors (Developer;Files;Percentage): 3 | Colin Seymour;564;13.29 4 | Arfon Smith;458;10.79 5 | John Gardner;453;10.67 6 | Adam Stankiewicz;322;7.59 7 | Joshua Peek;310;7.30 8 | Paul Chaignon;246;5.80 9 | Adam Roben;114;2.69 10 | Lars Brinkhoff;70;1.65 11 | Santiago M. Mola;66;1.56 12 | 13 | -------------------------------------------------------------------------------- /gittruckfactor/results/linux.txt: -------------------------------------------------------------------------------- 1 | TF = 12 (coverage = 49.98%) 2 | TF authors (Developer;Files;Percentage): 3 | Linus Torvalds;5712;6.59 4 | Mauro Carvalho Chehab;2479;2.86 5 | Rob Herring;1313;1.51 6 | Thomas Gleixner;1228;1.42 7 | Krzysztof Kozlowski;1222;1.41 8 | Ben Skeggs;1211;1.40 9 | Arnaldo Carvalho de Melo;911;1.05 10 | Greg Kroah-Hartman;852;0.98 11 | David Howells;718;0.83 12 | Ian Rogers;599;0.69 13 | Masahiro Yamada;598;0.69 14 | Takashi Iwai;581;0.67 15 | 16 | -------------------------------------------------------------------------------- /gittruckfactor/results/logstash.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 46.24%) 2 | TF authors (Developer;Files;Percentage): 3 | Joao Duarte;372;15.36 4 | Jenkins CI;268;11.07 5 | Pier-Hugues Pellerin;248;10.24 6 | Armin;182;7.51 7 | Andrea Selva;169;6.98 8 | Andrew Cholakian;147;6.07 9 | Ry Biesemeyer;145;5.99 10 | Guy Boertje;133;5.49 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/luigi.txt: -------------------------------------------------------------------------------- 1 | TF = 9 (coverage = 49.75%) 2 | TF authors (Developer;Files;Percentage): 3 | Erik Bernhardsson;74;18.59 4 | Arash Rouhani;58;14.57 5 | Stephen Pascoe;36;9.05 6 | Dave Buchfuhrer;22;5.53 7 | RDIL;21;5.28 8 | Joe Crobak;19;4.77 9 | Elias Freider;17;4.27 10 | Wojtek Wajerowicz;16;4.02 11 | Gram;12;3.02 12 | 13 | -------------------------------------------------------------------------------- /gittruckfactor/results/meteor.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 49.13%) 2 | TF authors (Developer;Files;Percentage): 3 | Ben Newman;890;26.35 4 | David Glasser;408;12.08 5 | Jan Dvorak;405;11.99 6 | Gabriel Grubba;297;8.79 7 | Martijn Walraven;256;7.58 8 | denihs;249;7.37 9 | Sashko Stubailo;179;5.30 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results/metrics.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 42.01%) 2 | TF authors (Developer;Files;Percentage): 3 | Coda Hale;207;38.48 4 | Jochen Schalanda;169;31.41 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/moment.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 45.28%) 2 | TF authors (Developer;Files;Percentage): 3 | Iskren Chernev;668;84.03 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/mongoid.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 18.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Durran Jordan;643;91.86 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/monolog.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 42.68%) 2 | TF authors (Developer;Files;Percentage): 3 | Jordi Boggiano;232;94.31 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/mustache.js.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 35.86%) 2 | TF authors (Developer;Files;Percentage): 3 | Michael Jackson;168;66.93 4 | Phillip Johnsen;68;27.09 5 | Jan Lehnardt;48;19.12 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results/netty.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 46.59%) 2 | TF authors (Developer;Files;Percentage): 3 | Trustin Lee;1037;30.45 4 | Norman Maurer;1032;30.30 5 | Scott Mitchell;355;10.42 6 | Artem Smotrakov;326;9.57 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/node-browserify.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 29.53%) 2 | TF authors (Developer;Files;Percentage): 3 | James Halliday;388;76.38 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/nokogiri.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 41.73%) 2 | TF authors (Developer;Files;Percentage): 3 | Mike Dalessio;331;65.16 4 | Aaron Patterson;134;26.38 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/odoo.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 49.44%) 2 | TF authors (Developer;Files;Percentage): 3 | Odoo Translation Bot;12033;33.27 4 | Martin Trigaux;2420;6.69 5 | Launchpad Translations on behalf of openerp;1610;4.45 6 | Odoo Online;1405;3.89 7 | --global;1327;3.67 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/openFrameworks.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 47.04%) 2 | TF authors (Developer;Files;Percentage): 3 | arturo castro;1168;34.10 4 | Theodore Watson;357;10.42 5 | Nick Hardeman;307;8.96 6 | random;255;7.45 7 | Kyle McDonald;236;6.89 8 | Dan Rosser;235;6.86 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/openage.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 48.21%) 2 | TF authors (Developer;Files;Percentage): 3 | heinezen;1149;66.49 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/opencv.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 47.52%) 2 | TF authors (Developer;Files;Percentage): 3 | Andrey Kamaev;2259;29.85 4 | Alexander Alekhin;1394;18.42 5 | Maksim Shabunin;544;7.19 6 | Dmitry Matveev;257;3.40 7 | Giles Payne;250;3.30 8 | Maxim Kostin;238;3.14 9 | abidrahmank;236;3.12 10 | OpenCV Buildbot;234;3.09 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results/osquery.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 45.32%) 2 | TF authors (Developer;Files;Percentage): 3 | Alessandro Gario;768;29.57 4 | Teddy Reed;640;24.64 5 | Stefano Bonicatti;344;13.25 6 | Max Kareta;234;9.01 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/pandas.txt: -------------------------------------------------------------------------------- 1 | TF = 9 (coverage = 49.20%) 2 | TF authors (Developer;Files;Percentage): 3 | jbrockmendel;858;32.82 4 | Matthew Roeschke;281;10.75 5 | Jeff Reback;225;8.61 6 | Simon Hawkins;141;5.39 7 | Patrick Hoefler;109;4.17 8 | Joris Van den Bossche;103;3.94 9 | Tom Augspurger;103;3.94 10 | gfyoung;96;3.67 11 | Wes McKinney;95;3.63 12 | 13 | -------------------------------------------------------------------------------- /gittruckfactor/results/paperclip.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Jon Yurek;142;75.53 4 | Prem Sichanugrist;37;19.68 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/pdf.js.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 46.24%) 2 | TF authors (Developer;Files;Percentage): 3 | Jonas Jenwald;787;37.95 4 | Calixte Denizet;586;28.25 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/phabricator.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 30.32%) 2 | TF authors (Developer;Files;Percentage): 3 | epriestley;7435;82.29 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/php-src.txt: -------------------------------------------------------------------------------- 1 | TF = 18 (coverage = 49.26%) 2 | TF authors (Developer;Files;Percentage): 3 | Peter Kokot;3931;16.01 4 | Nikita Popov;3025;12.32 5 | Dmitry Stogov;2269;9.24 6 | Niels Dossche;1468;5.98 7 | Anatol Belski;995;4.05 8 | Xinchen Hui;920;3.75 9 | Ilija Tovilo;908;3.70 10 | Raghubansh Kumar;867;3.53 11 | Christoph M. Becker;840;3.42 12 | Mate Kocsis;827;3.37 13 | Felipe Pena;817;3.33 14 | Gina Peter Banyard;742;3.02 15 | Marcus Boerger;718;2.92 16 | Stanislav Malyshev;702;2.86 17 | Antony Dovgal;696;2.84 18 | Greg Beaver;675;2.75 19 | SVN Migration;619;2.52 20 | Ant Phillips;590;2.40 21 | 22 | -------------------------------------------------------------------------------- /gittruckfactor/results/phpunit.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 19.47%) 2 | TF authors (Developer;Files;Percentage): 3 | Sebastian Bergmann;2510;94.15 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/platform_frameworks_base.txt: -------------------------------------------------------------------------------- 1 | TF = 17 (coverage = 49.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Bill Yi;5588;10.47 4 | Alan Viverette;3219;6.03 5 | The Android Open Source Project;2684;5.03 6 | Adam Powell;1598;2.99 7 | Justin Ho;1476;2.76 8 | Baligh Uddin;1236;2.32 9 | Dirk Dougherty;1210;2.27 10 | Geoff Mendal;1128;2.11 11 | Daniel Sandler;1118;2.09 12 | Jean-Baptiste Queru;974;1.82 13 | Jeff Sharkey;894;1.67 14 | Gilles Debunne;892;1.67 15 | John Reck;720;1.35 16 | Adam Lesinski;698;1.31 17 | Winson Chiu;693;1.30 18 | yangren;633;1.19 19 | Fabian Kozynski;622;1.17 20 | 21 | -------------------------------------------------------------------------------- /gittruckfactor/results/powerline.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 27.30%) 2 | TF authors (Developer;Files;Percentage): 3 | ZyX;336;88.19 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/prawn.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 49.82%) 2 | TF authors (Developer;Files;Percentage): 3 | Alexander Mankuta;144;51.61 4 | Felipe Doria;74;26.52 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/presto.txt: -------------------------------------------------------------------------------- 1 | TF = 21 (coverage = 48.96%) 2 | TF authors (Developer;Files;Percentage): 3 | Dain Sundstrom;1318;10.94 4 | Grzegorz Kokosinski;1086;9.02 5 | David Phillips;1022;8.49 6 | Christopher Berner;435;3.61 7 | Martin Traverso;425;3.53 8 | Rongrong Zhong;416;3.45 9 | Miguel Blanco Godon;399;3.31 10 | Andrii Rosa;376;3.12 11 | Lukasz Osipiuk;350;2.91 12 | Leiqing Cai;304;2.52 13 | Nikhil Collooru;289;2.40 14 | James Sun;278;2.31 15 | Haozhun Jin;272;2.26 16 | Karol Sobczak;252;2.09 17 | Michael Shang;251;2.08 18 | Piotr Findeisen;244;2.03 19 | Raghav Sethi;238;1.98 20 | Zhenxiao Luo;227;1.88 21 | Venki Korukanti;225;1.87 22 | Eric Hwang;219;1.82 23 | Rebecca Schlussel;185;1.54 24 | 25 | -------------------------------------------------------------------------------- /gittruckfactor/results/puphpet.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 1.69%) 2 | TF authors (Developer;Files;Percentage): 3 | Juan Treminio;2129;99.91 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/puppet.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 46.90%) 2 | TF authors (Developer;Files;Percentage): 3 | Henrik Lindberg;489;16.78 4 | Josh Cooper;480;16.47 5 | Luke Kanies;431;14.79 6 | Thomas Hallgren;366;12.56 7 | Michael Hashizume;175;6.00 8 | Andrew Parker;161;5.52 9 | Daniel Pittman;156;5.35 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results/rails.txt: -------------------------------------------------------------------------------- 1 | TF = 17 (coverage = 49.18%) 2 | TF authors (Developer;Files;Percentage): 3 | David Heinemeier Hansson;507;10.83 4 | Rafael Mendonca Franca;273;5.83 5 | Jose Valim;250;5.34 6 | Ryuta Kamizono;239;5.10 7 | Jeremy Kemper;234;5.00 8 | Piotr Sarnacki;221;4.72 9 | Aaron Patterson;189;4.04 10 | George Claghorn;126;2.69 11 | Jonathan Hefner;124;2.65 12 | Łukasz Strzałkowski;123;2.63 13 | Sean Griffin;121;2.58 14 | Xavier Noria;107;2.28 15 | Jean Boussier;106;2.26 16 | Pratik Naik;96;2.05 17 | Jon Leighton;95;2.03 18 | Joshua Peek;95;2.03 19 | eileencodes;85;1.82 20 | 21 | -------------------------------------------------------------------------------- /gittruckfactor/results/requirejs.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 4.22%) 2 | TF authors (Developer;Files;Percentage): 3 | jrburke;659;99.25 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/resque.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 44.95%) 2 | TF authors (Developer;Files;Percentage): 3 | Chris Wanstrath;59;54.13 4 | Tony Arcieri;8;7.34 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/rubocop.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 44.97%) 2 | TF authors (Developer;Files;Percentage): 3 | Koichi ITO;763;39.99 4 | Bozhidar Batsov;456;23.90 5 | Jonas Arvidsson;190;9.96 6 | Daniel Vandersluis;140;7.34 7 | Lee Dohm;120;6.29 8 | fatkodima;107;5.61 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/ruby.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 49.23%) 2 | TF authors (Developer;Files;Percentage): 3 | Benoit Daloze;4917;42.62 4 | Kevin Newton;1342;11.63 5 | Hiroshi SHIBATA;1260;10.92 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results/salt.txt: -------------------------------------------------------------------------------- 1 | TF = 10 (coverage = 49.68%) 2 | TF authors (Developer;Files;Percentage): 3 | Pedro Algarvio;1558;32.88 4 | Shane Lee;456;9.62 5 | Seth House;390;8.23 6 | Thomas S Hatch;335;7.07 7 | Daniel A. Wozniak;290;6.12 8 | Erik Johnson;277;5.85 9 | SaltyCharles;269;5.68 10 | Gareth J. Greenaway;196;4.14 11 | Jacob Hammons;187;3.95 12 | Ch3LL;185;3.90 13 | 14 | -------------------------------------------------------------------------------- /gittruckfactor/results/sass.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 24.27%) 2 | TF authors (Developer;Files;Percentage): 3 | Natalie Weizenbaum;178;86.41 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/scikit-learn.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 48.35%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas J. Fan;219;12.46 4 | Guillaume Lemaitre;185;10.52 5 | Adrin Jalali;159;9.04 6 | Loic Esteve;141;8.02 7 | Fabian Pedregosa;118;6.71 8 | Andreas Mueller;117;6.66 9 | Gael Varoquaux;99;5.63 10 | Olivier Grisel;72;4.10 11 | Jeremie du Boisberranger;67;3.81 12 | Nicolas Hug;60;3.41 13 | Lars Buitinck;53;3.01 14 | janvanrijn;53;3.01 15 | Alexandre Gramfort;41;2.33 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results/sentry.txt: -------------------------------------------------------------------------------- 1 | TF = 19 (coverage = 48.79%) 2 | TF authors (Developer;Files;Percentage): 3 | Evan Purkhiser;1332;8.60 4 | David Cramer;1242;8.02 5 | Katie Byers;996;6.43 6 | Billy Vong;789;5.09 7 | Armin Ronacher;718;4.63 8 | Markus Unterwaditzer;700;4.52 9 | Priscila Oliveira;656;4.23 10 | anthony sottile;643;4.15 11 | Mark Story;619;3.99 12 | Dan Fuller;550;3.55 13 | Ryan Albrecht;528;3.41 14 | josh;498;3.21 15 | Stephen Cefali;471;3.04 16 | Scott Cooper;397;2.56 17 | Jonas;382;2.47 18 | Marcos Gaeta;335;2.16 19 | Tony Xiao;331;2.14 20 | George Gritsouk;279;1.80 21 | Leander Rodrigues;258;1.67 22 | 23 | -------------------------------------------------------------------------------- /gittruckfactor/results/spring-framework.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 49.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Arjen Poutsma;2902;26.73 4 | Juergen Hoeller;2013;18.54 5 | Sam Brannen;1966;18.11 6 | rstoyanchev;1919;17.67 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/sprockets.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 0.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Joshua Peek;1;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/thor.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 47.46%) 2 | TF authors (Developer;Files;Percentage): 3 | Jose Valim;57;48.31 4 | Erik Michaels-Ober;29;24.58 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/three.js.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 46.54%) 2 | TF authors (Developer;Files;Percentage): 3 | Michael Herzog;1520;28.53 4 | Mr.doob;927;17.40 5 | Gregg Tavares;688;12.92 6 | sunag;584;10.96 7 | munrocket@pm.me;291;5.46 8 | Angela Busato;228;4.28 9 | Tristan VALCKE;205;3.85 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results/thumbor.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 46.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Bernardo Heynemann;345;55.02 4 | Ricardo L. Dani;109;17.38 5 | Gilles Dubuc;47;7.50 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results/tiled.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 32.18%) 2 | TF authors (Developer;Files;Percentage): 3 | Thorbjørn Lindeijer;1483;85.52 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/titan.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 42.85%) 2 | TF authors (Developer;Files;Percentage): 3 | Dan LaRocque;1321;66.28 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/twitter.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 29.03%) 2 | TF authors (Developer;Files;Percentage): 3 | Erik Berlin;239;85.66 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results/vagrant.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 41.02%) 2 | TF authors (Developer;Files;Percentage): 3 | Mitchell Hashimoto;678;26.93 4 | sophia;608;24.15 5 | Chris Roberts;463;18.39 6 | hashicorp-copywrite[bot];399;15.85 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results/vowpal_wabbit.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 46.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Jack Gerrits;1304;46.72 4 | Griffin Bassman;299;10.71 5 | John Langford;288;10.32 6 | Markus Cozowicz;228;8.17 7 | Hal Daume III;163;5.84 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results/webscalesql-5.6.txt: -------------------------------------------------------------------------------- 1 | TF = 27 (coverage = 49.84%) 2 | TF authors (Developer;Files;Percentage): 3 | Marc Alff;1027;7.00 4 | Omer BarNir;996;6.79 5 | Murthy Narkedimilli;918;6.26 6 | hhunger@hh-nb.hungers;830;5.66 7 | magnus@neptunus.(none);753;5.13 8 | Bernhard Ocklin;665;4.53 9 | Horst Hunger;434;2.96 10 | bk@work.mysql.com;433;2.95 11 | Jimmy Yang;409;2.79 12 | monty@donna.mysql.com;352;2.40 13 | Magnus Blaudd;346;2.36 14 | Kent Boortz;320;2.18 15 | akhil.mohan@oracle.com;312;2.13 16 | Satya B;277;1.89 17 | Jonas Oreland;258;1.76 18 | Mattias Jonsson;251;1.71 19 | Alfranio Correia;248;1.69 20 | shuichi@mysql.com;244;1.66 21 | guilhem@mysql.com;238;1.62 22 | bar@mysql.com;229;1.56 23 | Sven Sandberg;214;1.46 24 | Sergey Vojtovich;203;1.38 25 | lars@mysql.com;199;1.36 26 | Steaphan Greene;194;1.32 27 | Marko Makela;192;1.31 28 | Sergei Golubchik;192;1.31 29 | Luis Soares;190;1.29 30 | 31 | -------------------------------------------------------------------------------- /gittruckfactor/results/wp-cli.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 47.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Alain Schlesser;154;59.00 4 | danielbachhuber;77;29.50 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results/yii2.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 48.30%) 2 | TF authors (Developer;Files;Percentage): 3 | cuileon;1092;45.75 4 | Qiang Xue;416;17.43 5 | Carsten Brandt;269;11.27 6 | Alexander Makarov;267;11.19 7 | Nobuo Kihara;157;6.58 8 | Bizley;133;5.57 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results/youtube-dl.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 42.30%) 2 | TF authors (Developer;Files;Percentage): 3 | Sergey M․;442;45.06 4 | Remita Amine;213;21.71 5 | Philipp Hagemeister;187;19.06 6 | Jaime Marquinez Ferrandiz;90;9.17 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/AndEngine.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 6.51%) 2 | TF authors (Developer;Files;Percentage): 3 | Nicolas Gramlich;599;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/CodeMirror.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 49.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Marijn Haverbeke;406;79.45 4 | Adrian Heine;62;12.13 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Faker.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 49.49%) 2 | TF authors (Developer;Files;Percentage): 3 | Francois Zaninotto;73;12.41 4 | Andreas Moller;56;9.52 5 | John Was;35;5.95 6 | r3h6;30;5.10 7 | Owen Kieffer-Jones;18;3.06 8 | newman101;12;2.04 9 | Hugo Fonseca;11;1.87 10 | Tz-Huan Huang;10;1.70 11 | Yerlen Zhubangaliyev;10;1.70 12 | ppelgrims;9;1.53 13 | Bernhard Essl;9;1.53 14 | Roman 'pomaxa' Shvets;8;1.36 15 | andela-celisha-wigwe;8;1.36 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Flashlight.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 36.36%) 2 | TF authors (Developer;Files;Percentage): 3 | nate-parrott;769;65.95 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Ghost.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 49.11%) 2 | TF authors (Developer;Files;Percentage): 3 | Kevin Ansfield;969;20.94 4 | Hannah Wolfe;571;12.34 5 | Fabien 'egg' O'Carroll;562;12.14 6 | Simon Backx;548;11.84 7 | Daniel Lockyer;485;10.48 8 | Rishabh;475;10.26 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Leaflet.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 45.26%) 2 | TF authors (Developer;Files;Percentage): 3 | Vladimir Agafonkin;107;46.12 4 | Jon Koops;73;31.47 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Mailpile.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 48.86%) 2 | TF authors (Developer;Files;Percentage): 3 | Bjarni R. Einarsson;357;73.91 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/PHP-CS-Fixer.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 45.65%) 2 | TF authors (Developer;Files;Percentage): 3 | Dariusz Ruminski;717;57.22 4 | SpacePossum;374;29.85 5 | Kuba Werłos;316;25.22 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Ratchet.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 5.97%) 2 | TF authors (Developer;Files;Percentage): 3 | Chris Boden;67;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/RxJava.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 16.33%) 2 | TF authors (Developer;Files;Percentage): 3 | David Karnok;1831;97.08 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Silex.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 36.28%) 2 | TF authors (Developer;Files;Percentage): 3 | Fabien Potencier;98;86.73 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ThinkUp.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 49.73%) 2 | TF authors (Developer;Files;Percentage): 3 | Gina Trapani;957;86.53 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/Validation.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 46.14%) 2 | TF authors (Developer;Files;Percentage): 3 | Henrique Moody;633;75.09 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/WordPress.txt: -------------------------------------------------------------------------------- 1 | TF = 10 (coverage = 49.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Sergey Biryukov;587;23.09 4 | desrosj;401;15.77 5 | Andrew Ozz;296;11.64 6 | ryan;289;11.37 7 | gziolo;264;10.39 8 | Peter Wilson;123;4.84 9 | Gary Pendergast;119;4.68 10 | Scott Taylor;115;4.52 11 | youknowriad;104;4.09 12 | nacin;98;3.86 13 | 14 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ace.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 49.33%) 2 | TF authors (Developer;Files;Percentage): 3 | nightwing;681;75.84 4 | Fabian Jakobs;150;16.70 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/active_merchant.txt: -------------------------------------------------------------------------------- 1 | TF = 12 (coverage = 49.57%) 2 | TF authors (Developer;Files;Percentage): 3 | leila-alderman;172;21.31 4 | codyfauser;154;19.08 5 | Benjamin Pollack;87;10.78 6 | Nathaniel Talbott;69;8.55 7 | Duff OMelia;46;5.70 8 | Alma Malambo;35;4.34 9 | David Santoso;33;4.09 10 | David Perry;26;3.22 11 | Sanjay Chakrapani;25;3.10 12 | Mark Bennett;24;2.97 13 | Cody Fauser;22;2.73 14 | cristian;19;2.35 15 | 16 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/activeadmin.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 41.31%) 2 | TF authors (Developer;Files;Percentage): 3 | Greg Bell;164;41.31 4 | David Rodriguez;128;32.24 5 | Javier Julio;71;17.88 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ajenti.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 6.53%) 2 | TF authors (Developer;Files;Percentage): 3 | Eugeny Pankov;281;96.56 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/android.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 37.54%) 2 | TF authors (Developer;Files;Percentage): 3 | Meisolsson;162;51.10 4 | Kevin Sawicki;140;44.16 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/androidannotations.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 40.85%) 2 | TF authors (Developer;Files;Percentage): 3 | WonderCsabo;602;65.22 4 | Pierre-Yves Ricau;232;25.14 5 | yDelouis;209;22.64 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ansible.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.09%) 2 | TF authors (Developer;Files;Percentage): 3 | Matt Clay;1066;54.98 4 | Brian Coca;243;12.53 5 | Jordan Borean;176;9.08 6 | James Cammarata;164;8.46 7 | Toshio Kuratomi;163;8.41 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/assetic.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 38.06%) 2 | TF authors (Developer;Files;Percentage): 3 | Kris Wallsmith;183;74.09 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/atom-shell.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 45.02%) 2 | TF authors (Developer;Files;Percentage): 3 | Cheng Zhao;366;33.42 4 | Samuel Attard;202;18.45 5 | Jeremy Apthorp;147;13.42 6 | Milan Burda;118;10.78 7 | Shelley Vohr;98;8.95 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/backbone.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 38.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Jeremy Ashkenas;9;50.00 4 | Brad Dunbar;5;27.78 5 | Julian Gonggrijp;5;27.78 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/backup.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 42.99%) 2 | TF authors (Developer;Files;Percentage): 3 | Brian D. Burns;166;77.57 4 | Michael van Rooijen;61;28.50 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/beets.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 48.98%) 2 | TF authors (Developer;Files;Percentage): 3 | Adrian Sampson;89;45.41 4 | Sarunas Nejus;41;20.92 5 | Thomas Scholtes;17;8.67 6 | Bruno Cauet;15;7.65 7 | Fabrice Laporte;9;4.59 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/bitcoin.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 49.15%) 2 | TF authors (Developer;Files;Percentage): 3 | MarcoFalke;1031;60.12 4 | Pieter Wuille;202;11.78 5 | Wladimir J. van der Laan;128;7.46 6 | Mike Hearn;109;6.36 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/boto.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.67%) 2 | TF authors (Developer;Files;Percentage): 3 | Mitch.Garnaat;145;21.14 4 | Mitch Garnaat;120;17.49 5 | Daniel Lindsley;81;11.81 6 | James Saryerwinnie;79;11.52 7 | kyleknap;60;8.75 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/bundler.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 44.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Samuel Giddins;200;54.35 4 | Andre Arko;95;25.82 5 | David Rodriguez;78;21.20 6 | Carl Lerche;24;6.52 7 | Asutosh Palai;24;6.52 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/bup.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 35.32%) 2 | TF authors (Developer;Files;Percentage): 3 | Rob Browning;177;88.06 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/caffe.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.96%) 2 | TF authors (Developer;Files;Percentage): 3 | Evan Shelhamer;135;29.03 4 | Jeff Donahue;114;24.52 5 | Yangqing Jia;70;15.05 6 | Ronghang Hu;31;6.67 7 | Sergio;26;5.59 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/capnproto.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 17.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Kenton Varda;312;88.39 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/capybara.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 32.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas Walpole;296;96.42 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/cassandra.txt: -------------------------------------------------------------------------------- 1 | TF = 10 (coverage = 48.98%) 2 | TF authors (Developer;Files;Percentage): 3 | Benedict Elliott Smith;775;15.11 4 | Sam Tunnicliffe;442;8.62 5 | Mike Adamson;407;7.94 6 | Sylvain Lebresne;405;7.90 7 | Jonathan Ellis;365;7.12 8 | Alex Petrov;256;4.99 9 | David Capwell;231;4.50 10 | Marcus Eriksson;223;4.35 11 | Andres de la Pena;202;3.94 12 | Jacek Lewandowski;180;3.51 13 | 14 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/celery.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 37.35%) 2 | TF authors (Developer;Files;Percentage): 3 | Ask Solem;250;73.53 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/celluloid.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.03%) 2 | TF authors (Developer;Files;Percentage): 3 | //de;82;56.94 4 | Tony Arcieri;80;55.56 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/chef.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 45.69%) 2 | TF authors (Developer;Files;Percentage): 3 | Lamont Granquist;1017;41.90 4 | Tim Smith;348;14.34 5 | Daniel DeLeo;333;13.72 6 | Mike Dodge;226;9.31 7 | Marc A. Paradise;222;9.15 8 | Adam Jacob;201;8.28 9 | John Keiser;182;7.50 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/clojure.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 38.97%) 2 | TF authors (Developer;Files;Percentage): 3 | Rich Hickey;156;47.13 4 | Stuart Halloway;74;22.36 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/cocos2d-x.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 45.61%) 2 | TF authors (Developer;Files;Percentage): 3 | James Chen;684;28.08 4 | minggo;417;17.12 5 | yangxiao;296;12.15 6 | Ricardo Quesada;214;8.78 7 | andyque;181;7.43 8 | Arnold;172;7.06 9 | samuele3hu;120;4.93 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/composer.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 41.39%) 2 | TF authors (Developer;Files;Percentage): 3 | Jordi Boggiano;480;89.89 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/cucumber.txt: -------------------------------------------------------------------------------- 1 | TF = 0 (coverage = NaN%) 2 | TF authors (Developer;Files;Percentage): 3 | 4 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/d3.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 20.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Mike Bostock;5;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/devise.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 32.10%) 2 | TF authors (Developer;Files;Percentage): 3 | Jose Valim;151;62.14 4 | Carlos Antonio da Silva;65;26.75 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/diaspora.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 49.94%) 2 | TF authors (Developer;Files;Percentage): 3 | Benjamin Neff;329;20.49 4 | Steffen van Bergerem;307;19.12 5 | danielgrippi;237;14.76 6 | maxwell;159;9.90 7 | Jonne Haß;137;8.53 8 | cmrd Senya;128;7.97 9 | Raphael;96;5.98 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/django-cms.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 45.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Vadim Sikora;192;26.02 4 | Patrick Lauber;133;18.02 5 | Jonas Obrist;127;17.21 6 | Paulo;99;13.41 7 | Iacopo Spalletti;93;12.60 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/django-social-auth.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 43.14%) 2 | TF authors (Developer;Files;Percentage): 3 | Matias Aguirre;92;90.20 4 | Stas Kravets;15;14.71 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/django.txt: -------------------------------------------------------------------------------- 1 | TF = 12 (coverage = 47.88%) 2 | TF authors (Developer;Files;Percentage): 3 | Tim Graham;321;12.28 4 | Russell Keith-Magee;276;10.55 5 | Claude Paroz;264;10.10 6 | Preston Timmons;215;8.22 7 | Adrian Holovaty;208;7.95 8 | Aymeric Augustin;185;7.07 9 | Jannis Leidel;143;5.47 10 | Mariusz Felisiak;112;4.28 11 | Justin Bronn;108;4.13 12 | django-bot;95;3.63 13 | Malcolm Tredinnick;83;3.17 14 | Jacob Kaplan-Moss;77;2.94 15 | 16 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/dropwizard.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.24%) 2 | TF authors (Developer;Files;Percentage): 3 | Coda Hale;255;28.68 4 | Jochen Schalanda;166;18.67 5 | Artem Prigoda;133;14.96 6 | Russell Howe;90;10.12 7 | Steffen Nießing;65;7.31 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/drupal.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 43.43%) 2 | TF authors (Developer;Files;Percentage): 3 | Alex Pott;7400;59.28 4 | catch;5343;42.80 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/elasticsearch.txt: -------------------------------------------------------------------------------- 1 | TF = 26 (coverage = 49.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Mark Vieira;1863;8.80 4 | Nik Everett;1684;7.96 5 | Ryan Ernst;1230;5.81 6 | Shay Banon;1107;5.23 7 | Costin Leau;1069;5.05 8 | Benjamin Trent;790;3.73 9 | Simon Willnauer;737;3.48 10 | Martijn van Groningen;718;3.39 11 | David Turner;698;3.30 12 | Colin Goodheart-Smithe;586;2.77 13 | Armin Braun;549;2.59 14 | Dimitris Athanasiou;539;2.55 15 | Luca Cavanna;486;2.30 16 | Igor Motov;481;2.27 17 | uboness;472;2.23 18 | Tim Vernum;465;2.20 19 | David Kyle;402;1.90 20 | Adrien Grand;395;1.87 21 | Jack Conradson;388;1.83 22 | Jason Tedor;362;1.71 23 | Yang Wang;357;1.69 24 | David Roberts;344;1.63 25 | Nhat Nguyen;335;1.58 26 | Lee Hinman;333;1.57 27 | Tanguy Leroux;328;1.55 28 | Ignacio Vera;317;1.50 29 | 30 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ember.js.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 47.47%) 2 | TF authors (Developer;Files;Percentage): 3 | Robert Jackson;372;31.31 4 | Peter Wagenet;213;17.93 5 | Chris Garrett;120;10.10 6 | Chris Krycho;112;9.43 7 | Tobias Bieniek;103;8.67 8 | Chad Hietala;73;6.14 9 | Jean du Plessis;71;5.98 10 | Godfrey Chan;61;5.13 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/express.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 18.81%) 2 | TF authors (Developer;Files;Percentage): 3 | TJ Holowaychuk;68;67.33 4 | Douglas Christopher Wilson;52;51.49 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/factory_girl.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 30.82%) 2 | TF authors (Developer;Files;Percentage): 3 | Joshua Clayton;106;72.60 4 | Joe Ferris;40;27.40 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/flask.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 35.14%) 2 | TF authors (Developer;Files;Percentage): 3 | David Lord;56;75.68 4 | Armin Ronacher;37;50.00 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/fnordmetric.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 0.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Paul Asmuth;376;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/fog.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 45.31%) 2 | TF authors (Developer;Files;Percentage): 3 | Paul Thornthwaite;235;23.98 4 | Nick Osborn;201;20.51 5 | geemus;132;13.47 6 | Rodrigo Estebanez;81;8.27 7 | Kaloyan Kanev;70;7.14 8 | Decklin Foster;64;6.53 9 | Lincoln Stoll;52;5.31 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/formtastic.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 40.88%) 2 | TF authors (Developer;Files;Percentage): 3 | Justin French;118;74.21 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/geocoder.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 48.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Alex Reisner;129;53.31 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/git.txt: -------------------------------------------------------------------------------- 1 | TF = 14 (coverage = 49.68%) 2 | TF authors (Developer;Files;Percentage): 3 | Junio C Hamano;408;17.44 4 | Jeff King;369;15.78 5 | Ævar Arnfjorð Bjarmason;168;7.18 6 | Johannes Schindelin;144;6.16 7 | Elijah Newren;140;5.99 8 | Nguyen Thai Ngoc Duy;111;4.75 9 | Patrick Steinhardt;106;4.53 10 | Jeff Hostetler;86;3.68 11 | Rene Scharfe;72;3.08 12 | Linus Torvalds;65;2.78 13 | Eric Wong;57;2.44 14 | Derrick Stolee;53;2.27 15 | Taylor Blau;53;2.27 16 | Michael Haggerty;41;1.75 17 | 18 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/glide.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 7.79%) 2 | TF authors (Developer;Files;Percentage): 3 | judds;686;98.99 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/gradle.txt: -------------------------------------------------------------------------------- 1 | TF = 10 (coverage = 46.90%) 2 | TF authors (Developer;Files;Percentage): 3 | Adam Murdoch;4808;28.72 4 | Lorant Pinter;1455;8.69 5 | Daz DeBoer;1268;7.57 6 | Cedric Champeau;1068;6.38 7 | Luke Daley;971;5.80 8 | Gary Hale;951;5.68 9 | Stefan Wolf;826;4.93 10 | Thomas Tresansky;812;4.85 11 | Paul Merlin;798;4.77 12 | Rodrigo B. de Oliveira;680;4.06 13 | 14 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/grunt.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 20.83%) 2 | TF authors (Developer;Files;Percentage): 3 | Ben Alman;22;91.67 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/haml.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 40.53%) 2 | TF authors (Developer;Files;Percentage): 3 | Takashi Kokubun;173;91.05 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/homebrew-cask.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 49.94%) 2 | TF authors (Developer;Files;Percentage): 3 | Patrick Linnane;1938;26.94 4 | Bevan Kay;651;9.05 5 | Miccal Matthews;573;7.96 6 | BrewTestBot;527;7.32 7 | Randall;509;7.07 8 | Vitor Galvao;332;4.61 9 | Roland Walker;306;4.25 10 | Justin Krehel;293;4.07 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/homebrew.txt: -------------------------------------------------------------------------------- 1 | TF = 0 (coverage = NaN%) 2 | TF authors (Developer;Files;Percentage): 3 | 4 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/intellij-community.txt: -------------------------------------------------------------------------------- 1 | TF = 0 (coverage = NaN%) 2 | TF authors (Developer;Files;Percentage): 3 | 4 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/io.js.txt: -------------------------------------------------------------------------------- 1 | TF = 21 (coverage = 49.81%) 2 | TF authors (Developer;Files;Percentage): 3 | James M Snell;553;8.93 4 | Anna Henningsen;498;8.04 5 | Joyee Cheung;472;7.62 6 | Rich Trott;312;5.04 7 | Ben Noordhuis;258;4.16 8 | Ruben Bridgewater;240;3.87 9 | Antoine du Hamel;234;3.78 10 | Colin Ihrig;232;3.74 11 | Ryan Dahl;205;3.31 12 | Gabriel Schulhof;168;2.71 13 | Isaac Z. Schlueter;167;2.70 14 | Chengzhong Wu;151;2.44 15 | Robert Nagy;129;2.08 16 | Fedor Indutny;126;2.03 17 | Michael Zasso;116;1.87 18 | Matteo Collina;97;1.57 19 | Rafael Gonzaga;97;1.57 20 | Anatoli Papirovski;88;1.42 21 | Brian White;80;1.29 22 | Yagiz Nizipli;77;1.24 23 | Tobias Nießen;74;1.19 24 | 25 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ion.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 0.75%) 2 | TF authors (Developer;Files;Percentage): 3 | Koushik Dutta;132;99.25 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ionic.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 40.31%) 2 | TF authors (Developer;Files;Percentage): 3 | Liam DeBeasi;1227;55.95 4 | Brandy Carney;567;25.85 5 | Manu MA;366;16.69 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ipython.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 44.30%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas Kluyver;107;35.91 4 | Fernando Perez;79;26.51 5 | Matthias Bussonnier;77;25.84 6 | Benjamin Ragan-Kelley;59;19.80 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/jade.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 46.47%) 2 | TF authors (Developer;Files;Percentage): 3 | Forbes Lindesay;514;84.40 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/jedis.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 39.79%) 2 | TF authors (Developer;Files;Percentage): 3 | M Sazzadul Hoque;541;69.45 4 | Gabriel Erzse;99;12.71 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/jekyll.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 48.40%) 2 | TF authors (Developer;Files;Percentage): 3 | Parker Moore;146;51.96 4 | Ashwin Maroli;63;22.42 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/joomla-cms.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 47.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Allon Moritz;695;18.62 4 | Andrew Eddie;355;9.51 5 | infograf768;340;9.11 6 | wilsonge;306;8.20 7 | Michael Babker;304;8.14 8 | Fedir Zinchuk;256;6.86 9 | dGrammatiko;251;6.72 10 | Rob Schley;238;6.38 11 | Brian Teeman;213;5.71 12 | Hannes Papenberg;189;5.06 13 | Johan Janssens;184;4.93 14 | Harald Leithner;177;4.74 15 | Lodder;143;3.83 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/jquery-ui.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 45.69%) 2 | TF authors (Developer;Files;Percentage): 3 | Scott Gonzalez;203;51.52 4 | Richard Worth;87;22.08 5 | Jorn Zaefferer;48;12.18 6 | Alexander Schmitz;44;11.17 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/jquery.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.91%) 2 | TF authors (Developer;Files;Percentage): 3 | Michał Gołebiowski-Owczarek;189;59.43 4 | Timmy Willison;108;33.96 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/kivy.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 43.82%) 2 | TF authors (Developer;Files;Percentage): 3 | Mathieu Virbel;264;59.33 4 | matham;84;18.88 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/less.js.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 40.49%) 2 | TF authors (Developer;Files;Percentage): 3 | Matthew Dean;438;76.44 4 | Luke Page;231;40.31 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/libgdx.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 44.98%) 2 | TF authors (Developer;Files;Percentage): 3 | Xoppa;1118;35.31 4 | badlogicgames;1080;34.11 5 | Tomski;293;9.25 6 | sterwill@tinfig.com;277;8.75 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/linguist.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 43.42%) 2 | TF authors (Developer;Files;Percentage): 3 | Joshua Peek;21;27.63 4 | Vicent Marti;18;23.68 5 | Arfon Smith;11;14.47 6 | Colin Seymour;8;10.53 7 | John Gardner;8;10.53 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/linux.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 49.97%) 2 | TF authors (Developer;Files;Percentage): 3 | Linus Torvalds;5175;7.84 4 | Mauro Carvalho Chehab;1252;1.90 5 | Ben Skeggs;1177;1.78 6 | Thomas Gleixner;1143;1.73 7 | Greg Kroah-Hartman;793;1.20 8 | Arnaldo Carvalho de Melo;776;1.18 9 | David Howells;684;1.04 10 | Takashi Iwai;543;0.82 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/logstash.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 49.47%) 2 | TF authors (Developer;Files;Percentage): 3 | Pier-Hugues Pellerin;211;15.96 4 | Armin;162;12.25 5 | Joao Duarte;153;11.57 6 | Andrew Cholakian;118;8.93 7 | Andrea Selva;102;7.72 8 | Colin Surprenant;84;6.35 9 | Dan Hermann;83;6.28 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/luigi.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 48.09%) 2 | TF authors (Developer;Files;Percentage): 3 | Erik Bernhardsson;51;19.47 4 | Arash Rouhani;45;17.18 5 | Dave Buchfuhrer;17;6.49 6 | Elias Freider;13;4.96 7 | Guillaume Poulin;10;3.82 8 | Gram;8;3.05 9 | Uldis Barbans;7;2.67 10 | Jon Aslund;7;2.67 11 | Jake Feala;7;2.67 12 | Stephen Pascoe;6;2.29 13 | Marcel R;6;2.29 14 | Joe Ennever;6;2.29 15 | Ran Tavory;6;2.29 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/meteor.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 48.14%) 2 | TF authors (Developer;Files;Percentage): 3 | Ben Newman;536;33.29 4 | David Glasser;214;13.29 5 | Gabriel Grubba;122;7.58 6 | Jan Dvorak;98;6.09 7 | Slava Kim;88;5.47 8 | denihs;72;4.47 9 | Geoff Schmidt;56;3.48 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/metrics.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 35.93%) 2 | TF authors (Developer;Files;Percentage): 3 | Coda Hale;129;32.41 4 | Jochen Schalanda;122;30.65 5 | Artem Prigoda;101;25.38 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/moment.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.89%) 2 | TF authors (Developer;Files;Percentage): 3 | Iskren Chernev;510;82.39 4 | Tim Wood;108;17.45 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/mongoid.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 17.86%) 2 | TF authors (Developer;Files;Percentage): 3 | Durran Jordan;632;92.53 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/monolog.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 43.26%) 2 | TF authors (Developer;Files;Percentage): 3 | Jordi Boggiano;204;94.88 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/mustache.js.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 46.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Michael Jackson;105;70.00 4 | Phillip Johnsen;52;34.67 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/netty.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 46.72%) 2 | TF authors (Developer;Files;Percentage): 3 | Trustin Lee;1011;34.20 4 | Norman Maurer;953;32.24 5 | Scott Mitchell;330;11.16 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/node-browserify.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 31.33%) 2 | TF authors (Developer;Files;Percentage): 3 | James Halliday;292;76.24 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/nokogiri.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 43.17%) 2 | TF authors (Developer;Files;Percentage): 3 | Mike Dalessio;273;65.47 4 | Aaron Patterson;124;29.74 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/odoo.txt: -------------------------------------------------------------------------------- 1 | TF = 46 (coverage = 49.55%) 2 | TF authors (Developer;Files;Percentage): 3 | Thibault Delavallee;735;6.07 4 | Sebastien Theys;483;3.99 5 | Aaron Bohy;340;2.81 6 | william-andre;336;2.77 7 | Julien Mougenot;335;2.77 8 | tsm-odoo;287;2.37 9 | david;268;2.21 10 | Gery Debongnie;259;2.14 11 | Pierre Pulinckx (pipu);257;2.12 12 | qsm-odoo;226;1.87 13 | Yannick Tivisse;219;1.81 14 | Lucas Lefevre;216;1.78 15 | Alexandre Kuhn;200;1.65 16 | xmo-odoo;199;1.64 17 | William Braeckman;184;1.52 18 | vlst-odoo;183;1.51 19 | Gorash;173;1.43 20 | Victor Feyens;166;1.37 21 | std-odoo;162;1.34 22 | Romain Estievenart;161;1.33 23 | Xavier BOL (xbo);155;1.28 24 | mcm-odoo;153;1.26 25 | Aurelien Warnon;152;1.25 26 | Jeremy Kersten;134;1.11 27 | gawa-odoo;133;1.10 28 | Jerome Maes;128;1.06 29 | Joseph Caburnay;118;0.97 30 | Raphael Collet;116;0.96 31 | Fabien Pinckaers;109;0.90 32 | Maryam Kia;107;0.88 33 | Arnold Moyaux;104;0.86 34 | Romeo Fragomeli;103;0.85 35 | Kevin Baptiste;102;0.84 36 | Patrick Hoste;100;0.83 37 | rde;96;0.79 38 | FrancoisGe;94;0.78 39 | David Beguin;92;0.76 40 | Mathieu Duckerts-Antoine;91;0.75 41 | Laurent Smet;89;0.73 42 | Samuel Degueldre;86;0.71 43 | Pierre Paridans;85;0.70 44 | Martin Trigaux;84;0.69 45 | Remy Voet (ryv);81;0.67 46 | Maxime de Neuville;79;0.65 47 | Josse Colpaert;74;0.61 48 | Katherine Zaoral;74;0.61 49 | 50 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/openFrameworks.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 46.61%) 2 | TF authors (Developer;Files;Percentage): 3 | arturo;459;53.62 4 | ofTheo;73;8.53 5 | Dan Rosser;59;6.89 6 | Nick Hardeman;56;6.54 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/openage.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 48.98%) 2 | TF authors (Developer;Files;Percentage): 3 | heinezen;913;66.26 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/opencv.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 48.10%) 2 | TF authors (Developer;Files;Percentage): 3 | Vadim Pisarevsky;818;25.67 4 | Alexander Alekhin;663;20.80 5 | Dmitry Matveev;227;7.12 6 | Maksim Shabunin;185;5.80 7 | Giles Payne;165;5.18 8 | Yashas Samaga B L;120;3.77 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/osquery.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 42.05%) 2 | TF authors (Developer;Files;Percentage): 3 | Alessandro Gario;527;28.41 4 | Teddy Reed;398;21.46 5 | Stefano Bonicatti;282;15.20 6 | Max Kareta;234;12.61 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/pandas.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 47.82%) 2 | TF authors (Developer;Files;Percentage): 3 | jbrockmendel;802;48.61 4 | Matthew Roeschke;218;13.21 5 | Simon Hawkins;120;7.27 6 | Jeff Reback;110;6.67 7 | gfyoung;81;4.91 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/paperclip.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 44.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Jon Yurek;118;78.67 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/pdf.js.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 28.57%) 2 | TF authors (Developer;Files;Percentage): 3 | Jonas Jenwald;258;54.20 4 | Calixte Denizet;239;50.21 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/phabricator.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 28.85%) 2 | TF authors (Developer;Files;Percentage): 3 | epriestley;5617;86.70 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/php-src.txt: -------------------------------------------------------------------------------- 1 | TF = 18 (coverage = 49.87%) 2 | TF authors (Developer;Files;Percentage): 3 | Peter Kokot;3788;16.48 4 | Nikita Popov;2951;12.84 5 | Dmitry Stogov;2181;9.49 6 | Niels Dossche;1432;6.23 7 | Xinchen Hui;915;3.98 8 | Raghubansh Kumar;867;3.77 9 | Ilija Tovilo;859;3.74 10 | Felipe Pena;811;3.53 11 | Anatol Belski;807;3.51 12 | George Peter Banyard;732;3.18 13 | Christoph M. Becker;711;3.09 14 | Mate Kocsis;695;3.02 15 | Antony Dovgal;689;3.00 16 | Marcus Boerger;678;2.95 17 | Ant Phillips;570;2.48 18 | Stanislav Malyshev;525;2.28 19 | Greg Beaver;521;2.27 20 | SVN Migration;517;2.25 21 | 22 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/phpunit.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 19.76%) 2 | TF authors (Developer;Files;Percentage): 3 | Sebastian Bergmann;2276;94.68 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/platform_frameworks_base.txt: -------------------------------------------------------------------------------- 1 | TF = 50 (coverage = 49.97%) 2 | TF authors (Developer;Files;Percentage): 3 | The Android Open Source Project;1420;5.19 4 | Winson;526;1.92 5 | Fabian Kozynski;501;1.83 6 | Jeff Sharkey;472;1.73 7 | Adam Lesinski;471;1.72 8 | John Reck;450;1.65 9 | lpeter;438;1.60 10 | Caitlin Cassidy;398;1.46 11 | Dave Mankoff;392;1.43 12 | Alejandro Nijamkin;378;1.38 13 | Dianne Hackborn;376;1.37 14 | Anton Potapov;332;1.21 15 | Jason Monk;321;1.17 16 | Makoto Onuki;318;1.16 17 | Steve Elliott;278;1.02 18 | Matt Pietal;275;1.01 19 | Nataniel Borges;271;0.99 20 | Jeff DeCew;260;0.95 21 | Yohann Roussel;248;0.91 22 | Mike Lockwood;241;0.88 23 | Chaohui Wang;234;0.86 24 | Felipe Leme;232;0.85 25 | Svetoslav;231;0.84 26 | Miguel Aranda;231;0.84 27 | renn;229;0.84 28 | Evan Laird;226;0.83 29 | Dmitri Plotnikov;225;0.82 30 | Neil Fuller;210;0.77 31 | Jeff Brown;209;0.76 32 | Behnam Heydarshahi;203;0.74 33 | Mathew Inwood;202;0.74 34 | Joe Onorato;200;0.73 35 | Pablo Gamito;192;0.70 36 | Jordan Demeulenaere;186;0.68 37 | Jean-Baptiste Queru;185;0.68 38 | Jorim Jaggi;173;0.63 39 | John Wu;167;0.61 40 | Julia Reynolds;165;0.60 41 | Kevin Chyn;165;0.60 42 | Adrian Roos;163;0.60 43 | Yohei Yukawa;157;0.57 44 | Romain Guy;150;0.55 45 | Selim Cinek;149;0.54 46 | Soonil Nagarkar;149;0.54 47 | Joe Bolinger;148;0.54 48 | Lucas Silva;145;0.53 49 | Nick Chameyev;145;0.53 50 | John Spurlock;143;0.52 51 | Philip P. Moltmann;143;0.52 52 | Ryan Mitchell;143;0.52 53 | 54 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/powerline.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 18.40%) 2 | TF authors (Developer;Files;Percentage): 3 | ZyX;198;93.40 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/prawn.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 38.61%) 2 | TF authors (Developer;Files;Percentage): 3 | Alexander Mankuta;126;62.38 4 | Felipe Doria;73;36.14 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/presto.txt: -------------------------------------------------------------------------------- 1 | TF = 20 (coverage = 49.98%) 2 | TF authors (Developer;Files;Percentage): 3 | Dain Sundstrom;1243;13.88 4 | David Phillips;791;8.83 5 | Rongrong Zhong;403;4.50 6 | Christopher Berner;375;4.19 7 | Andrii Rosa;332;3.71 8 | Martin Traverso;331;3.70 9 | Nikhil Collooru;283;3.16 10 | Leiqing Cai;276;3.08 11 | James Sun;266;2.97 12 | Haozhun Jin;228;2.55 13 | Zhenxiao Luo;216;2.41 14 | Eric Hwang;207;2.31 15 | Grzegorz Kokosinski;197;2.20 16 | Lukasz Osipiuk;187;2.09 17 | Wenlei Xie;175;1.95 18 | Raghav Sethi;165;1.84 19 | Rebecca Schlussel;164;1.83 20 | Michael Shang;164;1.83 21 | Masha Basmanova;136;1.52 22 | Tim Meehan;127;1.42 23 | 24 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/puphpet.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 3.23%) 2 | TF authors (Developer;Files;Percentage): 3 | Juan Treminio;155;100.00 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/puppet.txt: -------------------------------------------------------------------------------- 1 | TF = 6 (coverage = 49.48%) 2 | TF authors (Developer;Files;Percentage): 3 | Luke Kanies;425;19.19 4 | Henrik Lindberg;389;17.56 5 | Josh Cooper;365;16.48 6 | Thomas Hallgren;225;10.16 7 | Michael Hashizume;170;7.67 8 | Andrew Parker;111;5.01 9 | 10 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/rails.txt: -------------------------------------------------------------------------------- 1 | TF = 15 (coverage = 49.85%) 2 | TF authors (Developer;Files;Percentage): 3 | David Heinemeier Hansson;351;10.33 4 | Ryuta Kamizono;224;6.59 5 | Jeremy Kemper;189;5.56 6 | Jose Valim;181;5.33 7 | Rafael Mendonca Franca;178;5.24 8 | Aaron Patterson;174;5.12 9 | Sean Griffin;119;3.50 10 | George Claghorn;108;3.18 11 | Jonathan Hefner;101;2.97 12 | Jon Leighton;86;2.53 13 | Jean Boussier;86;2.53 14 | Matthew Draper;80;2.35 15 | Joshua Peek;79;2.32 16 | Xavier Noria;78;2.30 17 | eileencodes;76;2.24 18 | 19 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/requirejs.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 2.62%) 2 | TF authors (Developer;Files;Percentage): 3 | jrburke;571;99.65 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/resque.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 45.95%) 2 | TF authors (Developer;Files;Percentage): 3 | Chris Wanstrath;38;51.35 4 | Tony Arcieri;7;9.46 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/rubocop.txt: -------------------------------------------------------------------------------- 1 | TF = 7 (coverage = 46.88%) 2 | TF authors (Developer;Files;Percentage): 3 | Koichi ITO;735;46.82 4 | Jonas Arvidsson;188;11.97 5 | Bozhidar Batsov;179;11.40 6 | Lee Dohm;120;7.64 7 | fatkodima;105;6.69 8 | Daniel Vandersluis;84;5.35 9 | Yuji Nakayama;83;5.29 10 | 11 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/ruby.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 47.54%) 2 | TF authors (Developer;Files;Percentage): 3 | Benoit Daloze;4780;53.97 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/salt.txt: -------------------------------------------------------------------------------- 1 | TF = 8 (coverage = 48.28%) 2 | TF authors (Developer;Files;Percentage): 3 | Pedro Algarvio;1143;45.20 4 | Twangboy;298;11.78 5 | Thomas S Hatch;184;7.28 6 | Gareth J. Greenaway;182;7.20 7 | Erik Johnson;176;6.96 8 | Daniel A. Wozniak;149;5.89 9 | Kirill Ponomarev;118;4.67 10 | MKLeb;115;4.55 11 | 12 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/sass.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 36.36%) 2 | TF authors (Developer;Files;Percentage): 3 | Natalie Weizenbaum;8;72.73 4 | Awjin Ahn;5;45.45 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/scikit-learn.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 49.52%) 2 | TF authors (Developer;Files;Percentage): 3 | Thomas J. Fan;130;17.83 4 | Adrin Jalali;76;10.43 5 | Andreas Mueller;67;9.19 6 | Guillaume Lemaitre;55;7.54 7 | jeremiedbb;45;6.17 8 | Fabian Pedregosa;42;5.76 9 | Nicolas Hug;40;5.49 10 | Loic Esteve;40;5.49 11 | Olivier Grisel;39;5.35 12 | Gael Varoquaux;34;4.66 13 | Lars Buitinck;28;3.84 14 | Arnaud Joly;22;3.02 15 | Joel Nothman;20;2.74 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/sentry.txt: -------------------------------------------------------------------------------- 1 | TF = 20 (coverage = 49.44%) 2 | TF authors (Developer;Files;Percentage): 3 | Evan Purkhiser;1215;10.41 4 | David Cramer;970;8.31 5 | Billy Vong;736;6.31 6 | Priscila Oliveira;632;5.41 7 | Mark Story;543;4.65 8 | anthony sottile;543;4.65 9 | Ryan Albrecht;502;4.30 10 | Dan Fuller;475;4.07 11 | Stephen Cefali;388;3.32 12 | Scott Cooper;385;3.30 13 | josh;340;2.91 14 | Jonas;335;2.87 15 | Tony;317;2.72 16 | Marcos Gaeta;299;2.56 17 | George Gritsouk;249;2.13 18 | Malachi Willey;249;2.13 19 | Leander Rodrigues;240;2.06 20 | ArthurKnaus;209;1.79 21 | Michelle Zhang;193;1.65 22 | edwardgou-sentry;176;1.51 23 | 24 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/spring-framework.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 45.68%) 2 | TF authors (Developer;Files;Percentage): 3 | Arjen Poutsma;2445;27.51 4 | Juergen Hoeller;1859;20.92 5 | rstoyanchev;1817;20.45 6 | Sam Brannen;1661;18.69 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/sprockets.txt: -------------------------------------------------------------------------------- 1 | TF = 0 (coverage = NaN%) 2 | TF authors (Developer;Files;Percentage): 3 | 4 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/thor.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 34.18%) 2 | TF authors (Developer;Files;Percentage): 3 | Jose Valim;48;60.76 4 | Erik Michaels-Ober;21;26.58 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/three.js.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 48.36%) 2 | TF authors (Developer;Files;Percentage): 3 | Gregg Tavares;400;25.79 4 | sunag;331;21.34 5 | Mr.doob;293;18.89 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/thumbor.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 41.00%) 2 | TF authors (Developer;Files;Percentage): 3 | Bernardo Heynemann;174;72.80 4 | Cezar Sa Espinola;38;15.90 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/tiled.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 32.74%) 2 | TF authors (Developer;Files;Percentage): 3 | Thorbjørn Lindeijer;740;88.41 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/titan.txt: -------------------------------------------------------------------------------- 1 | TF = 2 (coverage = 11.33%) 2 | TF authors (Developer;Files;Percentage): 3 | Dan LaRocque;752;54.97 4 | Matthias Broecheler;675;49.34 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/twitter.txt: -------------------------------------------------------------------------------- 1 | TF = 1 (coverage = 20.36%) 2 | TF authors (Developer;Files;Percentage): 3 | Erik Michaels-Ober;161;96.41 4 | 5 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/vagrant.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 44.12%) 2 | TF authors (Developer;Files;Percentage): 3 | Mitchell Hashimoto;656;29.78 4 | Chris Roberts;419;19.02 5 | sophia;399;18.11 6 | hashicorp-copywrite[bot];379;17.20 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/vowpal_wabbit.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 45.61%) 2 | TF authors (Developer;Files;Percentage): 3 | Jack Gerrits;595;52.80 4 | Markus Cozowicz;182;16.15 5 | John Langford;124;11.00 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/webscalesql-5.6.txt: -------------------------------------------------------------------------------- 1 | TF = 13 (coverage = 49.07%) 2 | TF authors (Developer;Files;Percentage): 3 | Murthy Narkedimilli;876;19.04 4 | magnus@neptunus.(none);679;14.76 5 | Bernhard Ocklin;624;13.57 6 | bk@work.mysql.com;347;7.54 7 | Kent Boortz;310;6.74 8 | Jimmy Yang;269;5.85 9 | Marc Alff;216;4.70 10 | Jonas Oreland;193;4.20 11 | Magnus Blaudd;152;3.30 12 | Satya B;141;3.07 13 | monty@donna.mysql.com;125;2.72 14 | jonas@perch.ndb.mysql.com;121;2.63 15 | Sergey Vojtovich;100;2.17 16 | 17 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/wp-cli.txt: -------------------------------------------------------------------------------- 1 | TF = 3 (coverage = 32.67%) 2 | TF authors (Developer;Files;Percentage): 3 | Alain Schlesser;70;46.67 4 | danielbachhuber;62;41.33 5 | scribu;48;32.00 6 | 7 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/yii2.txt: -------------------------------------------------------------------------------- 1 | TF = 5 (coverage = 46.60%) 2 | TF authors (Developer;Files;Percentage): 3 | ╃巡洋艦㊣;401;37.83 4 | Qiang Xue;314;29.62 5 | Carsten Brandt;179;16.89 6 | Alexander Makarov;147;13.87 7 | SilverFire - Dmitry Naumenko;79;7.45 8 | 9 | -------------------------------------------------------------------------------- /gittruckfactor/results_linguist/youtube-dl.txt: -------------------------------------------------------------------------------- 1 | TF = 4 (coverage = 42.92%) 2 | TF authors (Developer;Files;Percentage): 3 | Sergey M․;415;44.86 4 | Remita Amine;211;22.81 5 | Philipp Hagemeister;183;19.78 6 | Jaime Marquinez Ferrandiz;80;8.65 7 | 8 | -------------------------------------------------------------------------------- /gittruckfactor/scripts/commit_log_script.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | path=$1 4 | currentpath=${PWD} 5 | clear 6 | now=$(date) 7 | echo -e $now: BEGIN git log extraction: $path \\n 8 | 9 | cd $path 10 | 11 | git config diff.renameLimit 999999 12 | 13 | #Extract commit information 14 | git log --pretty=format:"%H-;-%aN-;-%aE-;-%at-;-%cN-;-%cE-;-%ct-;-%f" > commitinfo.log 15 | 16 | #Extract and format commit files information 17 | git log --name-status --pretty=format:"commit %H" --find-renames > log.log 18 | awk -F$'\t' -f $currentpath/log.awk log.log > commitfileinfo.log 19 | 20 | #Get current file list 21 | git ls-files > filelist.log 22 | 23 | #Remove temp file 24 | rm log.log 25 | 26 | git config --unset diff.renameLimit 27 | 28 | 29 | now=$(date) 30 | echo -e "Log files (commitinfo.log, commitfileinfo.log and filelist.log) were generated in $path folder: \\n" 31 | echo -e $now: END git log extraction: $path \\n 32 | -------------------------------------------------------------------------------- /gittruckfactor/scripts/linguist.rb: -------------------------------------------------------------------------------- 1 | require 'rugged' 2 | require 'linguist' 3 | repo = Rugged::Repository.new(ARGV[0]) 4 | project = Linguist::Repository.new(repo, repo.head.target_id) 5 | result = project.breakdown_by_file 6 | result.each { |l, fs| 7 | fs.each { |f| 8 | puts "#{l};#{f}" } 9 | } 10 | #puts result -------------------------------------------------------------------------------- /gittruckfactor/scripts/linguist_script.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | path=$1 4 | 5 | now=$(date) 6 | echo -e \\n$now: BEGIN linguist script\\n 7 | 8 | ruby linguist.rb $path > $path/linguistfiles.log 9 | 10 | echo -e "linguistfile.log was generated in $path folder: \\n" 11 | now=$(date) 12 | echo -e $now: END linguist script\\n 13 | -------------------------------------------------------------------------------- /gittruckfactor/scripts/log.awk: -------------------------------------------------------------------------------- 1 | $1 == "commit" {commit = $2} 2 | $1 == "A" {printf "%s;ADDED; ;%s\n", commit, $2 } 3 | $1 == "M" {printf "%s;MODIFIED; ;%s\n", commit, $2 } 4 | match($1,"R[0-9][0-9][0-9]") {printf "%s;RENAMED;%s;%s\n", commit, $2, $3 } 5 | 6 | -------------------------------------------------------------------------------- /gittruckfactor/src/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.eclipse.persistence.jpa.PersistenceProvider 9 | 10 | aserg.gtf.model.ProjectInfo 11 | aserg.gtf.model.LanguageInfo 12 | aserg.gtf.model.NewFileInfo 13 | aserg.gtf.model.LogCommitInfo 14 | aserg.gtf.model.LogCommitFileInfo 15 | aserg.gtf.model.authorship.Repository 16 | aserg.gtf.model.authorship.Developer 17 | aserg.gtf.model.authorship.File 18 | aserg.gtf.model.authorship.AuthorshipInfo 19 | aserg.gtf.model.authorship.DeveloperAuthorshipInfo 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/CommitFileDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.Query; 6 | 7 | import aserg.gtf.model.CommitFileInfo; 8 | import aserg.gtf.model.ProjectInfo; 9 | 10 | 11 | public class CommitFileDAO extends GenericDAO { 12 | 13 | 14 | @Override 15 | public void persist(CommitFileInfo project) { 16 | super.persist(project); 17 | } 18 | 19 | @Override 20 | public CommitFileInfo find(Object id) { 21 | return this.em.find(CommitFileInfo.class, id); 22 | } 23 | 24 | @Override 25 | public List findAll(Class clazz) { 26 | // TODO Auto-generated method stub 27 | return super.findAll(CommitFileInfo.class); 28 | } 29 | 30 | @Override 31 | public void merge(CommitFileInfo o) { 32 | super.merge(o); 33 | } 34 | 35 | private void update(ProjectInfo o){ 36 | 37 | } 38 | 39 | @Override 40 | public boolean exist(CommitFileInfo entity) { 41 | return this.find(entity.getId())!=null; 42 | } 43 | 44 | public List getAddsCommitFileOrderByNumberOfCFs(String repositoryName) { 45 | 46 | String hql = "SELECT COUNT(*) FROM COMMITINFO_COMMITFILEINFO ci_cfi " 47 | + "JOIN COMMITINFO ci ON ci_cfi.CommitInfo_ID = ci.ID " 48 | + "JOIN COMMITFILEINFO cfi ON ci_cfi.commitFiles_ID = cfi.ID " 49 | + "WHERE ci.REPOSITORYNAME = \"" + repositoryName +"\"" + " AND cfi.STATUS = \"ADDED\" " 50 | + "GROUP BY ci.SHA " 51 | + "ORDER BY COUNT(*) DESC;"; 52 | Query q = em.createNativeQuery(hql); 53 | 54 | return q.getResultList(); 55 | } 56 | 57 | public List newGetAddsCommitFileOrderByNumberOfCFs(String repositoryName) { 58 | 59 | String hql = "SELECT COUNT(*) FROM COMMITINFO_COMMITFILEINFO ci_cfi " 60 | + "JOIN COMMITINFO ci ON ci_cfi.CommitInfo_ID = ci.ID " 61 | + "JOIN COMMITFILEINFO cfi ON ci_cfi.commitFiles_ID = cfi.ID " 62 | 63 | + "JOIN projectinfo_fileinfo pi_fi ON pi_fi.ProjectInfo_FULLNAME = ci.REPOSITORYNAME " 64 | + "JOIN fileinfo fi ON pi_fi.files_ID = fi.ID " 65 | 66 | + "WHERE ci.REPOSITORYNAME = \"" + repositoryName +"\"" + " AND cfi.STATUS = \"ADDED\" AND cfi.NEWFILENAME = fi.PATH " 67 | + "GROUP BY ci.SHA " 68 | + "ORDER BY COUNT(*) DESC;"; 69 | Query q = em.createNativeQuery(hql); 70 | 71 | return q.getResultList(); 72 | } 73 | public List getAddsCommitFileOrderByDate(String repositoryName) { 74 | 75 | String hql = "SELECT COUNT(*) FROM COMMITINFO_COMMITFILEINFO ci_cfi " 76 | + "JOIN COMMITINFO ci ON ci_cfi.CommitInfo_ID = ci.ID " 77 | + "JOIN COMMITFILEINFO cfi ON ci_cfi.commitFiles_ID = cfi.ID " 78 | + "WHERE ci.REPOSITORYNAME = \"" + repositoryName +"\"" + " AND cfi.STATUS = \"ADDED\" " 79 | + "GROUP BY ci.SHA " 80 | + "ORDER BY ci.DATE;"; 81 | Query q = em.createNativeQuery(hql); 82 | 83 | return q.getResultList(); 84 | } 85 | 86 | public List newGetAddsCommitFileOrderByDate(String repositoryName) { 87 | 88 | String hql = "SELECT COUNT(*) FROM COMMITINFO_COMMITFILEINFO ci_cfi " 89 | + "JOIN COMMITINFO ci ON ci_cfi.CommitInfo_ID = ci.ID " 90 | + "JOIN COMMITFILEINFO cfi ON ci_cfi.commitFiles_ID = cfi.ID " 91 | 92 | + "JOIN projectinfo_fileinfo pi_fi ON pi_fi.ProjectInfo_FULLNAME = ci.REPOSITORYNAME " 93 | + "JOIN fileinfo fi ON pi_fi.files_ID = fi.ID " 94 | 95 | + "WHERE ci.REPOSITORYNAME = \"" + repositoryName +"\"" + " AND cfi.STATUS = \"ADDED\" AND cfi.NEWFILENAME = fi.PATH " 96 | + "GROUP BY ci.SHA " 97 | + "ORDER BY ci.DATE;"; 98 | Query q = em.createNativeQuery(hql); 99 | 100 | return q.getResultList(); 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/CommitInfoDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.Query; 6 | 7 | import aserg.gtf.model.CommitFileInfo; 8 | import aserg.gtf.model.CommitInfo; 9 | import aserg.gtf.model.GitRepository; 10 | import aserg.gtf.model.ProjectInfo; 11 | 12 | 13 | public class CommitInfoDAO extends GenericDAO { 14 | PersistThread thread = null; 15 | @Override 16 | public void persist(CommitInfo project) { 17 | super.persist(project); 18 | } 19 | 20 | @Override 21 | public CommitInfo find(Object id) { 22 | return this.em.find(CommitInfo.class, id); 23 | } 24 | 25 | @Override 26 | public List findAll(Class clazz) { 27 | return super.findAll(CommitInfo.class); 28 | } 29 | 30 | public CommitInfo find(String repositoryName, String sha){ 31 | String hql = "select a from " + CommitInfo.class.getSimpleName() + " a " + 32 | " WHERE a.repositoryName = \""+repositoryName+"\"" + " AND a.sha = \"" + sha +"\""; 33 | Query q = em.createQuery(hql); 34 | return (CommitInfo)q.getSingleResult(); 35 | } 36 | 37 | public List findAllOrderByRepositoryName() { 38 | String hql = "select a from " + CommitInfo.class.getSimpleName() + " a order by a.repositoryName"; 39 | Query q = em.createQuery(hql); 40 | return q.getResultList(); 41 | } 42 | 43 | public int getNumberAuthors(String repositoryName) { 44 | // String hql = "SELECT COUNT(C) FROM " + CommitInfo.class.getSimpleName() + " C WHERE C.repositoryName = \":name\""; 45 | String hql = "SELECT COUNT(DISTINCT ci.email) FROM COMMITINFO ci WHERE ci.repositoryName = \'" + repositoryName+"\'"; 46 | Query q = em.createNativeQuery(hql); 47 | 48 | return ((Long)q.getSingleResult()).intValue(); 49 | } 50 | 51 | @Override 52 | public void merge(CommitInfo o) { 53 | CommitInfo commit = this.find(o.getSha()); 54 | if (commit == null) 55 | super.merge(o); 56 | } 57 | 58 | public void persistAll(List commits){ 59 | if (thread == null) 60 | thread = new PersistThread(commits, this); 61 | else { 62 | try { 63 | if (thread.isAlive()) 64 | thread.join(); 65 | thread.setList(commits); 66 | } catch (InterruptedException e) { 67 | e.printStackTrace(); 68 | } 69 | } 70 | thread.run(); 71 | } 72 | 73 | public void update(CommitInfo o){ 74 | CommitInfo persistedCommit = this.em.find(CommitInfo.class, o.getId()); 75 | if (persistedCommit != null){ 76 | persistedCommit.setCommitFiles(o.getCommitFiles()); 77 | persistedCommit.setDate(o.getDate()); 78 | persistedCommit.setEmail(o.getEmail()); 79 | persistedCommit.setLogCommitFiles(o.getLogCommitFiles()); 80 | persistedCommit.setMessage(o.getMessage()); 81 | persistedCommit.setName(o.getName()); 82 | persistedCommit.setRepositoryName(o.getRepositoryName()); 83 | persistedCommit.setSha(o.getSha()); 84 | persistedCommit.setNameCommiter(o.getNameCommiter()); 85 | persistedCommit.setEmaiCommiter(o.getEmaiCommiter()); 86 | super.merge(persistedCommit); 87 | } 88 | } 89 | 90 | // public void updateOnlyLogFiles(CommitInfo o){ 91 | // CommitInfo persistedCommit = this.em.find(CommitInfo.class, o.getId()); 92 | // if (persistedCommit.equals(o)){ 93 | // super.merge(o); 94 | // } 95 | // if (persistedCommit != null){ 96 | // persistedCommit.setLogCommitFiles(o.getLogCommitFiles()); 97 | // super.merge(persistedCommit); 98 | // } 99 | // } 100 | 101 | @Override 102 | public boolean exist(CommitInfo entity) { 103 | return this.find(entity.getSha())!=null; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/GenericDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.EntityManager; 6 | import javax.persistence.EntityManagerFactory; 7 | import javax.persistence.EntityTransaction; 8 | import javax.persistence.Persistence; 9 | import javax.persistence.Query; 10 | 11 | import org.eclipse.persistence.sessions.Session; 12 | 13 | 14 | public abstract class GenericDAO { 15 | protected final EntityManager em = Persistence.createEntityManagerFactory("main").createEntityManager(); 16 | 17 | public GenericDAO() { 18 | super(); 19 | } 20 | 21 | public void persist(T o) { 22 | EntityTransaction tx = this.em.getTransaction(); 23 | try { 24 | tx.begin(); 25 | this.em.persist(o); 26 | tx.commit(); 27 | } catch (RuntimeException e) { 28 | if(tx != null && tx.isActive()) 29 | tx.rollback(); 30 | throw e; 31 | } 32 | } 33 | 34 | public abstract T find(Object id); 35 | public abstract boolean exist(T entity); 36 | 37 | public void remove(T o) { 38 | EntityTransaction tx = this.em.getTransaction(); 39 | try { 40 | tx.begin(); 41 | this.em.remove(o); 42 | tx.commit(); 43 | } catch (RuntimeException e) { 44 | if(tx != null && tx.isActive()) 45 | tx.rollback(); 46 | throw e; 47 | } 48 | finally{ 49 | this.em.clear(); 50 | } 51 | } 52 | 53 | public void merge(T o) { 54 | EntityTransaction tx = this.em.getTransaction(); 55 | try { 56 | tx.begin(); 57 | this.em.merge(o); 58 | tx.commit(); 59 | } catch (RuntimeException e) { 60 | if(tx != null && tx.isActive()) 61 | tx.rollback(); 62 | throw e; 63 | } 64 | finally{ 65 | this.em.clear(); 66 | } 67 | } 68 | 69 | @Override 70 | protected void finalize() throws Throwable { 71 | this.em.close(); 72 | super.finalize(); 73 | } 74 | 75 | public List findAll(Class clazz) { 76 | String hql = "select a from " + clazz.getSimpleName() + " a"; 77 | Query q = em.createQuery(hql); 78 | return q.getResultList(); 79 | } 80 | 81 | 82 | 83 | } 84 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/GitRepositoryDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.List; 4 | 5 | import aserg.gtf.model.GitRepository; 6 | import aserg.gtf.model.ProjectInfo; 7 | 8 | 9 | public class GitRepositoryDAO extends GenericDAO { 10 | 11 | 12 | @Override 13 | public void persist(GitRepository o) { 14 | GitRepository repository = this.em.find(GitRepository.class, o.getRepositoryName()); 15 | if (repository == null) 16 | super.persist(o); 17 | } 18 | 19 | @Override 20 | public GitRepository find(Object id) { 21 | return this.em.find(GitRepository.class, id); 22 | } 23 | 24 | @Override 25 | public List findAll(Class clazz) { 26 | // TODO Auto-generated method stub 27 | return super.findAll(GitRepository.class); 28 | } 29 | 30 | @Override 31 | public void merge(GitRepository o) { 32 | GitRepository gitRepo = this.find(o.getRepositoryName()); 33 | if (gitRepo != null){ 34 | super.remove(gitRepo); 35 | } 36 | super.merge(o); 37 | } 38 | 39 | private void removeDuplicadeCommitFiles(GitRepository gitRepo, 40 | GitRepository o) { 41 | 42 | 43 | } 44 | 45 | private void update(ProjectInfo o){ 46 | 47 | } 48 | 49 | @Override 50 | public boolean exist(GitRepository entity) { 51 | return this.find(entity.getRepositoryName())!=null; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/LogCommitDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.Collection; 4 | import java.util.List; 5 | 6 | import javax.persistence.Query; 7 | 8 | import aserg.gtf.model.LogCommitInfo; 9 | 10 | public class LogCommitDAO extends GenericDAO{ 11 | public List getProjectsName(){ 12 | String hql = "SELECT repositoryName FROM logcommitinfo ci GROUP BY repositoryName;"; 13 | Query q = em.createNativeQuery(hql); 14 | return q.getResultList(); 15 | 16 | } 17 | 18 | @Override 19 | public void persist(LogCommitInfo logCFiles) { 20 | super.persist(logCFiles); 21 | } 22 | 23 | @Override 24 | public LogCommitInfo find(Object id) { 25 | return this.em.find(LogCommitInfo.class, id); 26 | } 27 | 28 | @Override 29 | public List findAll(Class clazz) { 30 | // TODO Auto-generated method stub 31 | return super.findAll(LogCommitInfo.class); 32 | } 33 | 34 | @Override 35 | public void merge(LogCommitInfo o) { 36 | super.merge(o); 37 | } 38 | 39 | 40 | @Override 41 | public boolean exist(LogCommitInfo commit) { 42 | return this.find(commit.getId())!=null; 43 | } 44 | 45 | PersistThread thread = null; 46 | public void persistAll(Collection logCommits){ 47 | if (thread == null) 48 | thread = new PersistThread(logCommits, this); 49 | else { 50 | try { 51 | if (thread.isAlive()) 52 | thread.join(); 53 | thread = new PersistThread(logCommits, this); 54 | } catch (InterruptedException e) { 55 | e.printStackTrace(); 56 | } 57 | } 58 | 59 | thread.start(); 60 | } 61 | 62 | public void clear() { 63 | this.em.clear(); 64 | } 65 | 66 | 67 | 68 | } 69 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/PersistThread.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.Collection; 4 | import java.util.List; 5 | 6 | import javax.persistence.EntityTransaction; 7 | 8 | public class PersistThread extends Thread{ 9 | Collection list; 10 | GenericDAO persistDAO; 11 | public PersistThread(Collection list, GenericDAO persistDAO) { 12 | this.list = list; 13 | this.persistDAO = persistDAO; 14 | } 15 | @Override 16 | public void run() { 17 | System.out.println("Thread iniciada = "+this.getName() + " persisting objects: "+ list.size()); 18 | EntityTransaction tx = persistDAO.em.getTransaction(); 19 | try { 20 | tx.begin(); 21 | for (T t : list) { 22 | persistDAO.em.persist(t); 23 | } 24 | tx.commit(); 25 | } catch (RuntimeException e) { 26 | if(tx != null && tx.isActive()) 27 | tx.rollback(); 28 | throw e; 29 | } 30 | finally{ 31 | persistDAO.em.clear(); 32 | } 33 | 34 | System.out.println("Thread Finalizada = "+this.getName()); 35 | } 36 | 37 | public void setList(Collection list) { 38 | this.list = list; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/ProjectInfoDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.Query; 6 | 7 | import aserg.gtf.model.ProjectInfo; 8 | 9 | 10 | public class ProjectInfoDAO extends GenericDAO { 11 | 12 | 13 | @Override 14 | public void persist(ProjectInfo o) { 15 | ProjectInfo persistedProject = this.em.find(ProjectInfo.class, o.getFullName()); 16 | if (persistedProject == null) 17 | super.persist(o); 18 | 19 | } 20 | 21 | @Override 22 | public ProjectInfo find(Object id) { 23 | return this.em.find(ProjectInfo.class, id); 24 | } 25 | 26 | @Override 27 | public List findAll(Class clazz) { 28 | // TODO Auto-generated method stub 29 | return super.findAll(ProjectInfo.class); 30 | } 31 | public List findNotFiltered() { 32 | String hql = "select a from " + ProjectInfo.class.getSimpleName() + " a where a.filtered = \'FALSE\' "; 33 | Query q = em.createQuery(hql); 34 | return q.getResultList(); 35 | } 36 | 37 | 38 | @Override 39 | public void merge(ProjectInfo o) { 40 | super.merge(o); 41 | } 42 | 43 | public void update(ProjectInfo o){ 44 | ProjectInfo persistedProject = this.em.find(ProjectInfo.class, o.getFullName()); 45 | if (persistedProject != null){ 46 | persistedProject.setCloneUrl(o.getCloneUrl()); 47 | persistedProject.setCommits_count(o.getCommits_count()); 48 | persistedProject.setCreated_at(o.getCreated_at()); 49 | persistedProject.setDefault_branch(o.getDefault_branch()); 50 | persistedProject.setDescription(o.getDescription()); 51 | persistedProject.setError_commits_count(o.getError_commits_count()); 52 | persistedProject.setForks_count(o.getForks_count()); 53 | persistedProject.setLanguage(o.getLanguage()); 54 | persistedProject.setNumAuthors(o.getNumAuthors()); 55 | persistedProject.setOpen_issues(o.getOpen_issues()); 56 | persistedProject.setPushed_at(o.getPushed_at()); 57 | persistedProject.setQuery(o.getQuery()); 58 | persistedProject.setSize(o.getSize()); 59 | persistedProject.setStargazers_count(o.getStargazers_count()); 60 | persistedProject.setUpdated_at(o.getUpdated_at()); 61 | persistedProject.setWatchers_count(o.getWatchers_count()); 62 | persistedProject.setLastCommit(o.getLastCommit()); 63 | persistedProject.setErrorMsg(o.getErrorMsg()); 64 | persistedProject.setStatus(o.getStatus()); 65 | persistedProject.setFiltered(o.isFiltered()); 66 | persistedProject.setFilterinfo(o.getFilterinfo()); 67 | persistedProject.setLanguages(o.getLanguages()); 68 | persistedProject.setMainLanguage(o.getMainLanguage()); 69 | persistedProject.setNumFiles(o.getNumFiles()); 70 | persistedProject.setFiles(o.getFiles()); 71 | super.merge(persistedProject); 72 | o.setUpdated(false); 73 | } 74 | } 75 | 76 | @Override 77 | public boolean exist(ProjectInfo entity) { 78 | return this.find(entity.getFullName())!=null; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/authorship/AuthorshipInfoDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao.authorship; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.Query; 6 | 7 | import aserg.gtf.dao.GenericDAO; 8 | import aserg.gtf.dao.PersistThread; 9 | import aserg.gtf.model.authorship.AuthorshipInfo; 10 | 11 | 12 | public class AuthorshipInfoDAO extends GenericDAO { 13 | 14 | 15 | @Override 16 | public void persist(AuthorshipInfo o) { 17 | if (o.getId()!=null){ 18 | AuthorshipInfo authorshipInfo = this.em.find(AuthorshipInfo.class, o.getId()); 19 | if (authorshipInfo != null) 20 | return; 21 | } 22 | super.persist(o); 23 | } 24 | 25 | @Override 26 | public AuthorshipInfo find(Object id) { 27 | return this.em.find(AuthorshipInfo.class, id); 28 | } 29 | 30 | @Override 31 | public List findAll(Class clazz) { 32 | return super.findAll(AuthorshipInfo.class); 33 | } 34 | 35 | 36 | @Override 37 | public void merge(AuthorshipInfo o) { 38 | super.merge(o); 39 | } 40 | 41 | 42 | @Override 43 | public boolean exist(AuthorshipInfo entity) { 44 | return this.find(entity.getId())!=null; 45 | } 46 | 47 | PersistThread thread = null; 48 | public void persistAll(List authorshipsInfo){ 49 | if (thread == null) 50 | thread = new PersistThread(authorshipsInfo, this); 51 | else { 52 | try { 53 | if (thread.isAlive()) 54 | thread.join(); 55 | thread = new PersistThread(authorshipsInfo, this); 56 | } catch (InterruptedException e) { 57 | e.printStackTrace(); 58 | } 59 | } 60 | thread.start(); 61 | } 62 | 63 | public List getAuthorshipInfoList(String repositoryName){ 64 | String hql = "SELECT a FROM Repository r " 65 | + "JOIN r.files as f " 66 | + "JOIN f.authorshipInfos a " 67 | 68 | + "WHERE r.fullName = "+ "\'" + repositoryName +"\' "; 69 | Query q = em.createQuery(hql); 70 | return q.getResultList(); 71 | } 72 | 73 | public void updateDOA(AuthorshipInfo a){ 74 | AuthorshipInfo persistedAuthorshipInfo = this.em.find(AuthorshipInfo.class, a.getId()); 75 | persistedAuthorshipInfo.updateDOA(); 76 | super.merge(persistedAuthorshipInfo); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/authorship/DeveloperAuthorshipInfoDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao.authorship; 2 | 3 | import java.util.Collection; 4 | import java.util.List; 5 | 6 | import javax.persistence.Query; 7 | 8 | import aserg.gtf.dao.GenericDAO; 9 | import aserg.gtf.dao.PersistThread; 10 | import aserg.gtf.model.authorship.DeveloperAuthorshipInfo; 11 | 12 | 13 | public class DeveloperAuthorshipInfoDAO extends GenericDAO { 14 | 15 | 16 | @Override 17 | public void persist(DeveloperAuthorshipInfo o) { 18 | if (o.getId()!=null){ 19 | DeveloperAuthorshipInfo developerAuthorshipInfo = this.em.find(DeveloperAuthorshipInfo.class, o.getId()); 20 | if (developerAuthorshipInfo != null) 21 | return; 22 | } 23 | super.persist(o); 24 | 25 | } 26 | 27 | @Override 28 | public DeveloperAuthorshipInfo find(Object id) { 29 | return this.em.find(DeveloperAuthorshipInfo.class, id); 30 | } 31 | 32 | @Override 33 | public List findAll(Class clazz) { 34 | return super.findAll(DeveloperAuthorshipInfo.class); 35 | } 36 | 37 | 38 | @Override 39 | public void merge(DeveloperAuthorshipInfo o) { 40 | super.merge(o); 41 | } 42 | 43 | 44 | @Override 45 | public boolean exist(DeveloperAuthorshipInfo entity) { 46 | return this.find(entity.getId())!=null; 47 | } 48 | 49 | PersistThread thread = null; 50 | public void persistAll(Collection developerAuthors){ 51 | if (thread == null) 52 | thread = new PersistThread(developerAuthors, this); 53 | else { 54 | try { 55 | if (thread.isAlive()) 56 | thread.join(); 57 | thread = new PersistThread(developerAuthors, this); 58 | } catch (InterruptedException e) { 59 | e.printStackTrace(); 60 | } 61 | } 62 | thread.start(); 63 | } 64 | 65 | public List projectsAlreadyCalculated(){ 66 | String hql = "SELECT dai.repositoryname FROM developerauthorshipinfo dai GROUP BY dai.repositoryname;"; 67 | Query q = em.createNativeQuery(hql); 68 | return q.getResultList(); 69 | } 70 | 71 | public int numDevelopers(String repositoryName){ 72 | String hql = "SELECT COUNT(*) FROM developerauthorshipinfo dai WHERE dai.repositoryname = \'"+repositoryName+"\';"; 73 | Query q = em.createNativeQuery(hql); 74 | 75 | return Integer.parseInt(q.getSingleResult().toString()); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/authorship/DeveloperDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao.authorship; 2 | 3 | import java.util.List; 4 | 5 | import javax.persistence.Query; 6 | 7 | import aserg.gtf.dao.GenericDAO; 8 | import aserg.gtf.dao.PersistThread; 9 | import aserg.gtf.model.authorship.Developer; 10 | 11 | 12 | public class DeveloperDAO extends GenericDAO { 13 | 14 | 15 | @Override 16 | public void persist(Developer o) { 17 | if (o.getId()!=null){ 18 | Developer persistedDeveloper = this.em.find(Developer.class, o.getId()); 19 | if (persistedDeveloper != null) 20 | return; 21 | } 22 | super.persist(o); 23 | } 24 | 25 | @Override 26 | public Developer find(Object id) { 27 | return this.em.find(Developer.class, id); 28 | } 29 | public List getDevelopers(String repositoryName, String newusername){ 30 | 31 | if (newusername.contains("\'")) 32 | newusername = newusername.replace("'", "''"); 33 | String hql = "SELECT d FROM Repository r " 34 | + "JOIN r.developers as d " 35 | 36 | + "WHERE r.fullName = "+ "\'" + repositoryName +"\' AND d.removed = \'FALSE\' AND d.newUserName = "+ "\'" + newusername +"\'"; 37 | Query q = em.createQuery(hql); 38 | return q.getResultList(); 39 | } 40 | 41 | @Override 42 | public List findAll(Class clazz) { 43 | // TODO Auto-generated method stub 44 | return super.findAll(Developer.class); 45 | } 46 | 47 | 48 | @Override 49 | public void merge(Developer o) { 50 | super.merge(o); 51 | } 52 | 53 | public List getAllDevelopers(String repositoryName){ 54 | String hql = "SELECT d FROM Repository r " 55 | + "JOIN r.developers as d " 56 | 57 | + "WHERE r.fullName = "+ "\'" + repositoryName +"\' AND d.removed = \'FALSE\' "; 58 | Query q = em.createQuery(hql); 59 | return q.getResultList(); 60 | } 61 | 62 | @Override 63 | public boolean exist(Developer entity) { 64 | return this.find(entity.getId())!=null; 65 | } 66 | PersistThread thread = null; 67 | public void persistAll(List developers){ 68 | if (thread == null) 69 | thread = new PersistThread(developers, this); 70 | else { 71 | try { 72 | if (thread.isAlive()) 73 | thread.join(); 74 | thread = new PersistThread(developers, this); 75 | } catch (InterruptedException e) { 76 | e.printStackTrace(); 77 | } 78 | } 79 | thread.start(); 80 | } 81 | 82 | public void update(Developer o){ 83 | Developer persistedDeveloper = this.em.find(Developer.class, o.getId()); 84 | if (persistedDeveloper != null){ 85 | persistedDeveloper.setAuthorshipInfos(o.getAuthorshipInfos()); 86 | persistedDeveloper.setEmail(o.getEmail()); 87 | persistedDeveloper.setName(o.getName()); 88 | persistedDeveloper.setNewUserName(o.getNewUserName()); 89 | if (o.isRemoved()) 90 | persistedDeveloper.setAsRemoved(); 91 | persistedDeveloper.setStatus(o.getStatus()); 92 | persistedDeveloper.setOrigemDevelopers(o.getOrigemDevelopers()); 93 | super.merge(persistedDeveloper); 94 | } 95 | } 96 | 97 | public List getDuplicatedUsernames(String repositoryName) { 98 | String hql = "SELECT newusername FROM repository r " 99 | + "JOIN repository_developer rd ON rd.repository_id = r.id " 100 | + "JOIN developer d ON rd.developers_id = d.id " 101 | + " WHERE r.fullname = "+ "\'" + repositoryName +"\' AND removed = \'FALSE\' " 102 | + "GROUP BY newusername " 103 | + "HAVING COUNT(DISTINCT username)>1 " 104 | + "ORDER BY newusername;"; 105 | Query q = em.createNativeQuery(hql); 106 | return q.getResultList(); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/dao/authorship/FileDAO.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.dao.authorship; 2 | 3 | import java.util.List; 4 | 5 | import aserg.gtf.dao.GenericDAO; 6 | import aserg.gtf.dao.PersistThread; 7 | import aserg.gtf.model.authorship.File; 8 | 9 | 10 | public class FileDAO extends GenericDAO { 11 | 12 | 13 | @Override 14 | public void persist(File o) { 15 | if (o.getId()!=null){ 16 | File persistedFile = this.em.find(File.class, o.getId()); 17 | if (persistedFile != null) 18 | return; 19 | } 20 | super.persist(o); 21 | } 22 | 23 | @Override 24 | public File find(Object id) { 25 | return this.em.find(File.class, id); 26 | } 27 | 28 | @Override 29 | public List findAll(Class clazz) { 30 | // TODO Auto-generated method stub 31 | return super.findAll(File.class); 32 | } 33 | 34 | 35 | @Override 36 | public void merge(File o) { 37 | super.merge(o); 38 | } 39 | 40 | 41 | @Override 42 | public boolean exist(File entity) { 43 | return this.find(entity.getId())!=null; 44 | } 45 | PersistThread thread = null; 46 | public void persistAll(List files){ 47 | if (thread == null) 48 | thread = new PersistThread(files, this); 49 | else { 50 | try { 51 | if (thread.isAlive()) 52 | thread.join(); 53 | thread = new PersistThread(files, this); 54 | } catch (InterruptedException e) { 55 | e.printStackTrace(); 56 | } 57 | } 58 | thread.start(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/AbstractEntity.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | 4 | import java.io.Serializable; 5 | 6 | import javax.persistence.MappedSuperclass; 7 | import javax.persistence.Transient; 8 | 9 | @MappedSuperclass 10 | public abstract class AbstractEntity implements Serializable { 11 | @Transient 12 | private static final long serialVersionUID = -3038903536445432584L; 13 | // @Id 14 | // @GeneratedValue(strategy = GenerationType.AUTO) 15 | // protected Long id; 16 | // 17 | // public Long getId() { 18 | // id = null; 19 | // return id; 20 | // } 21 | // 22 | // public void setId(final Long id) { 23 | // this.id = null; 24 | // } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/CommitFileInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | import javax.persistence.Column; 4 | import javax.persistence.Entity; 5 | import javax.persistence.EnumType; 6 | import javax.persistence.Enumerated; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | 11 | @Entity 12 | public class CommitFileInfo extends AbstractEntity{ 13 | 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.AUTO) 16 | protected Long id; 17 | 18 | private String newFileSha; 19 | private String oldFileSha; 20 | @Column(length = 1000) 21 | private String oldFileName; 22 | @Column(length = 1000) 23 | private String newFileName; 24 | @Enumerated(EnumType.STRING) 25 | private Status status; 26 | // private int additions; 27 | // private int deletions; 28 | // private int commitId; 29 | 30 | public CommitFileInfo() { 31 | // TODO Auto-generated constructor stub 32 | } 33 | 34 | 35 | public CommitFileInfo(String oldFileName, String newFileName, Status status, String oldFileSha, String newFileSHA) { 36 | super(); 37 | this.oldFileName = oldFileName; 38 | this.newFileName = newFileName; 39 | this.status = status; 40 | this.oldFileSha = oldFileSha; 41 | this.newFileSha = newFileSHA; 42 | // setShaKey(commitSha+oldFileSha+newFileSHA); 43 | } 44 | 45 | // public Long getId() { 46 | // id = null; 47 | // return id; 48 | // } 49 | // 50 | // public void setId(final Long id) { 51 | // this.id = null; 52 | // } 53 | 54 | @Override 55 | public String toString() { 56 | return newFileSha + ", " + newFileName + ", " + status; //+ ", " + additions + ", " + deletions + ", " + sha + ", " + commitId + ", " + message; 57 | } 58 | public String getNewFileName() { 59 | return newFileName; 60 | } 61 | 62 | public void setNewFileName(String fileName) { 63 | this.newFileName = fileName; 64 | } 65 | 66 | public Status getStatus() { 67 | return status; 68 | } 69 | 70 | public void setStatus(Status status) { 71 | this.status = status; 72 | } 73 | 74 | // @Override 75 | // public int compareTo(CommitFileInfo o) { 76 | //// if (this.status == Status.ADDED) 77 | //// if (o.status == Status.ADDED) 78 | //// return 0; 79 | //// else 80 | //// return -1; 81 | // return this.date.compareTo(o.date); 82 | // } 83 | 84 | 85 | public String getOldFileName() { 86 | return oldFileName; 87 | } 88 | 89 | public void setOldFileName(String oldFileName) { 90 | this.oldFileName = oldFileName; 91 | } 92 | 93 | public String getNewFileSha() { 94 | return newFileSha; 95 | } 96 | 97 | public void setNewFileSha(String fileSha) { 98 | this.newFileSha = fileSha; 99 | } 100 | 101 | public String getOldFileSha() { 102 | return oldFileSha; 103 | } 104 | 105 | public void setOldFileSha(String oldFileSha) { 106 | this.oldFileSha = oldFileSha; 107 | } 108 | 109 | 110 | public Long getId() { 111 | return id; 112 | } 113 | 114 | 115 | 116 | 117 | } 118 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/GitRepository.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | 4 | import java.util.List; 5 | 6 | import javax.persistence.CascadeType; 7 | import javax.persistence.Entity; 8 | import javax.persistence.Id; 9 | import javax.persistence.OneToMany; 10 | import javax.persistence.OneToOne; 11 | 12 | @SuppressWarnings("serial") 13 | @Entity 14 | public class GitRepository extends AbstractEntity{ 15 | @Id 16 | private String repositoryName; 17 | 18 | @OneToOne(cascade = { CascadeType.REFRESH }) 19 | ProjectInfo projectInfo; 20 | @OneToMany(cascade = { CascadeType.ALL }) 21 | List commits; 22 | 23 | public GitRepository() { 24 | } 25 | 26 | public GitRepository(ProjectInfo projectInfo, List commits) { 27 | this.projectInfo = projectInfo; 28 | this.commits = commits; 29 | this.repositoryName = projectInfo.getFullName(); 30 | } 31 | 32 | public ProjectInfo getProjectInfo() { 33 | return projectInfo; 34 | } 35 | 36 | public void setProjectInfo(ProjectInfo projectInfo) { 37 | this.projectInfo = projectInfo; 38 | this.repositoryName = projectInfo.getFullName(); 39 | } 40 | 41 | public List getCommits() { 42 | return commits; 43 | } 44 | 45 | public void setCommits(List commits) { 46 | this.commits = commits; 47 | } 48 | 49 | public String getRepositoryName() { 50 | return repositoryName; 51 | } 52 | 53 | public void setRepositoryName(String repositoryName) { 54 | this.repositoryName = repositoryName; 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/LanguageInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | import javax.persistence.Entity; 4 | import javax.persistence.GeneratedValue; 5 | import javax.persistence.GenerationType; 6 | import javax.persistence.Id; 7 | 8 | @Entity 9 | public class LanguageInfo extends AbstractEntity{ 10 | 11 | @Id 12 | @GeneratedValue(strategy = GenerationType.AUTO) 13 | protected Long id; 14 | 15 | private String language; 16 | private long size; 17 | 18 | public LanguageInfo() { 19 | // TODO Auto-generated constructor stub 20 | } 21 | 22 | 23 | public LanguageInfo(String language, long size) { 24 | super(); 25 | this.language = language; 26 | this.size = size; 27 | } 28 | 29 | 30 | 31 | public String getLanguage() { 32 | return language; 33 | } 34 | 35 | 36 | 37 | public void setLanguage(String language) { 38 | this.language = language; 39 | } 40 | 41 | 42 | 43 | public long getSize() { 44 | return size; 45 | } 46 | 47 | 48 | 49 | public void setSize(long size) { 50 | this.size = size; 51 | } 52 | 53 | 54 | 55 | public Long getId() { 56 | return id; 57 | } 58 | 59 | 60 | 61 | 62 | } 63 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/LogCommitFileInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.EnumType; 7 | import javax.persistence.Enumerated; 8 | import javax.persistence.GeneratedValue; 9 | import javax.persistence.GenerationType; 10 | import javax.persistence.Id; 11 | import javax.persistence.ManyToOne; 12 | 13 | import org.eclipse.persistence.annotations.Index; 14 | 15 | @Entity 16 | public class LogCommitFileInfo extends AbstractEntity{ 17 | 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.AUTO) 20 | protected Long id; 21 | 22 | static int count = 0; 23 | private Integer tempId; 24 | 25 | private String repositoryName; 26 | @ManyToOne(cascade = { CascadeType.REFRESH }) 27 | private LogCommitInfo commitInfo; 28 | 29 | @Index(name="OLDFILENAMEINDEX") 30 | @Column(length = 1000) 31 | private String oldFileName; 32 | @Index(name="NEWFILENAMEINDEX") 33 | @Column(length = 1000) 34 | private String newFileName; 35 | @Enumerated(EnumType.STRING) 36 | private Status status; 37 | 38 | public LogCommitFileInfo() { 39 | // TODO Auto-generated constructor stub 40 | } 41 | 42 | 43 | 44 | 45 | public LogCommitFileInfo(LogCommitInfo commitInfo, String status, String oldFileName, String newFileName) { 46 | super(); 47 | this.commitInfo = commitInfo; 48 | this.repositoryName = commitInfo.getRepositoryName(); 49 | this.oldFileName = oldFileName; 50 | this.newFileName = newFileName; 51 | this.status = Status.getStatus(status); 52 | this.setTempId(count++); 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return newFileName + ", " + status; //+ ", " + additions + ", " + deletions + ", " + " + commitId + ", " + message; 58 | } 59 | public String getNewFileName() { 60 | return newFileName; 61 | } 62 | 63 | public void setNewFileName(String fileName) { 64 | this.newFileName = fileName; 65 | } 66 | 67 | public Status getStatus() { 68 | return status; 69 | } 70 | 71 | public void setStatus(Status status) { 72 | this.status = status; 73 | } 74 | 75 | // @Override 76 | // public int compareTo(CommitFileInfo o) { 77 | //// if (this.status == Status.ADDED) 78 | //// if (o.status == Status.ADDED) 79 | //// return 0; 80 | //// else 81 | //// return -1; 82 | // return this.date.compareTo(o.date); 83 | // } 84 | 85 | 86 | public String getOldFileName() { 87 | return oldFileName; 88 | } 89 | 90 | public void setOldFileName(String oldFileName) { 91 | this.oldFileName = oldFileName; 92 | } 93 | 94 | 95 | public Long getId() { 96 | return id; 97 | } 98 | 99 | 100 | public String getRepositoryName() { 101 | return repositoryName; 102 | } 103 | 104 | 105 | public void setRepositoryName(String repositoryName) { 106 | this.repositoryName = repositoryName; 107 | } 108 | 109 | 110 | public LogCommitInfo getCommitInfo() { 111 | return commitInfo; 112 | } 113 | 114 | 115 | public void setCommitInfo(LogCommitInfo commitInfo) { 116 | this.commitInfo = commitInfo; 117 | } 118 | 119 | 120 | 121 | 122 | public Integer getTempId() { 123 | return tempId; 124 | } 125 | 126 | 127 | 128 | 129 | public void setTempId(Integer tempId) { 130 | this.tempId = tempId; 131 | } 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | } 140 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/NewFileInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | import javax.persistence.Entity; 4 | import javax.persistence.EnumType; 5 | import javax.persistence.Enumerated; 6 | import javax.persistence.GeneratedValue; 7 | import javax.persistence.GenerationType; 8 | import javax.persistence.Id; 9 | import javax.persistence.Table; 10 | import javax.persistence.UniqueConstraint; 11 | 12 | import org.eclipse.persistence.annotations.Index; 13 | 14 | @Entity 15 | @Table( 16 | name = "NEWFILEINFO", 17 | uniqueConstraints = {@UniqueConstraint(columnNames = {"repositoryName", "path"})} 18 | ) 19 | public class NewFileInfo extends AbstractEntity{ 20 | 21 | /** 22 | * 23 | */ 24 | private static final long serialVersionUID = 1L; 25 | 26 | @Id 27 | @GeneratedValue(strategy = GenerationType.AUTO) 28 | protected Long id; 29 | 30 | @Index(name="NEWFILEPATHINDEX") 31 | private String path; 32 | private Boolean filtered; 33 | private String filterInfo; 34 | private int size; 35 | @Enumerated(EnumType.STRING) 36 | private FileType kind; 37 | private String language; 38 | 39 | private String module = "NONE"; 40 | 41 | 42 | 43 | @Index(name="NEWFILEREPOSITORYNAMEINDEX") 44 | private String repositoryName; 45 | 46 | public NewFileInfo() { 47 | // TODO Auto-generated constructor stub 48 | } 49 | 50 | public NewFileInfo(String repositoryName, String path) { 51 | this.repositoryName = repositoryName; 52 | this.path = path; 53 | this.filtered = false; 54 | } 55 | public NewFileInfo(String repositoryName, String path, String language) { 56 | this.repositoryName = repositoryName; 57 | this.path = path; 58 | this.filtered = false; 59 | this.language = language; 60 | } 61 | 62 | // public NewFileInfo(String repositoryName, String path, FileType kind, String language) { 63 | // super(); 64 | // this.repositoryName = repositoryName; 65 | // this.path = path; 66 | // this.filtered = false; 67 | // this.filterInfo = new String(); 68 | // this.kind = kind; 69 | // this.setLanguage(language); 70 | // } 71 | 72 | public Long getId() { 73 | return id; 74 | } 75 | 76 | 77 | 78 | public String getPath() { 79 | return path; 80 | } 81 | 82 | 83 | 84 | public void setPath(String path) { 85 | this.path = path; 86 | } 87 | 88 | 89 | 90 | public int getSize() { 91 | return size; 92 | } 93 | 94 | 95 | 96 | public void setSize(int size) { 97 | this.size = size; 98 | } 99 | 100 | 101 | 102 | public Boolean getFiltered() { 103 | return filtered; 104 | } 105 | 106 | public void setFiltered(Boolean filtered) { 107 | this.filtered = filtered; 108 | } 109 | 110 | public String getFilterInfo() { 111 | return filterInfo; 112 | } 113 | 114 | public void setFilterInfo(String filterInfo) { 115 | this.filterInfo = filterInfo; 116 | } 117 | 118 | public FileType getKind() { 119 | return kind; 120 | } 121 | 122 | public void setKind(FileType kind) { 123 | this.kind = kind; 124 | } 125 | 126 | public String getLanguage() { 127 | return language; 128 | } 129 | 130 | public void setLanguage(String language) { 131 | this.language = language; 132 | } 133 | 134 | @Override 135 | public String toString() { 136 | return this.path + "("+this.filtered+")"; 137 | } 138 | 139 | public String getModule() { 140 | return module; 141 | } 142 | 143 | public void setModule(String module) { 144 | this.module = module; 145 | } 146 | 147 | } 148 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/ProjectStatus.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | public enum ProjectStatus { 4 | NULL, ERROR, DOWNLOADED, ANALYZING, ANALYZED; 5 | } 6 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/Status.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model; 2 | 3 | 4 | public enum Status { 5 | ADDED, MODIFIED, RENAMED, REMOVED, COPIED, DELETED, RENAMED_TREATED; 6 | 7 | public static Status getStatus(String str){ 8 | if (str.equalsIgnoreCase("added")||str.equalsIgnoreCase("add")) 9 | return ADDED; 10 | if (str.equalsIgnoreCase("modified")||str.equalsIgnoreCase("modify")) 11 | return MODIFIED; 12 | if (str.equalsIgnoreCase("renamed")||str.equalsIgnoreCase("rename")) 13 | return RENAMED; 14 | if (str.equalsIgnoreCase("removed")||str.equalsIgnoreCase("remove")) 15 | return REMOVED; 16 | if (str.equalsIgnoreCase("copy")) 17 | return COPIED; 18 | if (str.equalsIgnoreCase("delete")) 19 | return DELETED; 20 | if (str.equalsIgnoreCase("RENAMED_TREATED")) 21 | return RENAMED_TREATED; 22 | 23 | return null; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/DevStatus.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | public enum DevStatus { 4 | DEFAULT, TEMPORARY, MERGED, REMOVED; 5 | } 6 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/Developer.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import javax.persistence.CascadeType; 7 | import javax.persistence.Entity; 8 | import javax.persistence.EnumType; 9 | import javax.persistence.Enumerated; 10 | import javax.persistence.GeneratedValue; 11 | import javax.persistence.GenerationType; 12 | import javax.persistence.Id; 13 | import javax.persistence.OneToMany; 14 | 15 | @Entity 16 | public class Developer { 17 | @Id 18 | @GeneratedValue(strategy = GenerationType.AUTO) 19 | protected Long id; 20 | private String name; 21 | private String email; 22 | private String newUserName; 23 | private boolean removed; 24 | 25 | @Enumerated(EnumType.STRING) 26 | private DevStatus status; 27 | 28 | @OneToMany(cascade = { CascadeType.REFRESH }) 29 | private List origemDevelopers; 30 | 31 | @OneToMany(cascade = { CascadeType.REFRESH }) 32 | private List authorshipInfos = new ArrayList(); 33 | private List authorshipFiles; 34 | 35 | public Developer() { 36 | // TODO Auto-generated constructor stub 37 | } 38 | public Developer(String name, String email, String userName) { 39 | super(); 40 | this.name = name; 41 | this.email = email; 42 | this.newUserName = userName; 43 | this.removed = false; 44 | this.status = DevStatus.DEFAULT; 45 | } 46 | public Developer(String name, String email, String userName, DevStatus status) { 47 | super(); 48 | this.name = name; 49 | this.email = email; 50 | this.newUserName = userName; 51 | this.removed = false; 52 | this.status = status; 53 | } 54 | 55 | public Developer(String userName) { 56 | super(); 57 | this.newUserName = userName; 58 | this.removed=false; 59 | } 60 | // public static String createUserName(String name, String email){ 61 | // String userName; 62 | // if (!email.isEmpty()) 63 | // userName = email; 64 | // else{ 65 | // userName = "[NoEmail]"+name; 66 | // if (name.isEmpty()) 67 | // userName = "[NoEmail-NoName]"; 68 | // } 69 | // return userName; 70 | // } 71 | 72 | 73 | public Long getId() { 74 | return id; 75 | } 76 | public String getName() { 77 | return name; 78 | } 79 | 80 | public void setName(String name) { 81 | this.name = name; 82 | } 83 | 84 | public String getEmail() { 85 | return email; 86 | } 87 | 88 | public void setEmail(String email) { 89 | this.email = email; 90 | } 91 | 92 | public List getAuthorshipInfos() { 93 | return authorshipInfos; 94 | } 95 | 96 | public void setAuthorshipInfos(List authorshipInfos) { 97 | this.authorshipInfos = authorshipInfos; 98 | } 99 | 100 | public void addAuthorshipInfo(AuthorshipInfo authorshipInfo) { 101 | this.authorshipInfos.add(authorshipInfo); 102 | } 103 | 104 | @Override 105 | public String toString() { 106 | return newUserName; 107 | } 108 | 109 | public String getNewUserName() { 110 | return newUserName; 111 | } 112 | 113 | public void setNewUserName(String newUserName) { 114 | this.newUserName = newUserName; 115 | } 116 | 117 | public boolean isRemoved() { 118 | return removed; 119 | } 120 | 121 | public void setAsRemoved() { 122 | this.removed = true; 123 | this.status = DevStatus.REMOVED; 124 | } 125 | 126 | public DevStatus getStatus() { 127 | return status; 128 | } 129 | public void setStatus(DevStatus status) { 130 | this.status = status; 131 | } 132 | public List getOrigemDevelopers() { 133 | return origemDevelopers; 134 | } 135 | public void addOrigemDeveloper(Developer dev) { 136 | if(origemDevelopers == null) 137 | origemDevelopers = new ArrayList(); 138 | origemDevelopers.add(dev); 139 | } 140 | public void setOrigemDevelopers(List origemDevelopers) { 141 | this.origemDevelopers = origemDevelopers; 142 | } 143 | 144 | public List getAuthorshipFiles() { 145 | if (authorshipFiles == null){ 146 | authorshipFiles = new ArrayList(); 147 | for (AuthorshipInfo authorship : this.getAuthorshipInfos()) { 148 | if (authorship.isDOAAuthor()) 149 | authorshipFiles.add(authorship.getFile()); 150 | } 151 | } 152 | return authorshipFiles; 153 | } 154 | public int getDevChanges(){ 155 | int count = 0; 156 | for (AuthorshipInfo authorshipInfo : authorshipInfos) { 157 | count+=(authorshipInfo.isFirstAuthor()||authorshipInfo.isSecondaryAuthor()?1:0)+authorshipInfo.getnDeliveries(); 158 | } 159 | return count; 160 | } 161 | 162 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/DeveloperAuthorshipInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | import java.util.Set; 4 | 5 | import javax.persistence.ElementCollection; 6 | import javax.persistence.Entity; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.Table; 11 | import javax.persistence.UniqueConstraint; 12 | 13 | @Entity 14 | @Table( 15 | name = "developerauthorshipinfo", 16 | uniqueConstraints = {@UniqueConstraint(columnNames = {"repositoryName", "userName"})} 17 | ) 18 | public class DeveloperAuthorshipInfo { 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.AUTO) 21 | protected Long id; 22 | 23 | private String repositoryName; 24 | private String userName; 25 | private int index; 26 | @ElementCollection 27 | private Set fileNames; 28 | private Double focus; 29 | private int spread; 30 | private Double spreadNormalized; 31 | private int numFiles; 32 | public DeveloperAuthorshipInfo() { 33 | // TODO Auto-generated constructor stub 34 | } 35 | 36 | public DeveloperAuthorshipInfo(String userName, int index, Set fileNames, String repositoryName) { 37 | super(); 38 | this.userName = userName; 39 | this.index = index; 40 | this.fileNames = fileNames; 41 | this.repositoryName = repositoryName; 42 | } 43 | 44 | public String getUserName() { 45 | return userName; 46 | } 47 | 48 | public int getIndex() { 49 | return index; 50 | } 51 | 52 | public Set getFileNames() { 53 | return fileNames; 54 | } 55 | 56 | public Double getFocus() { 57 | return focus; 58 | } 59 | 60 | public void setFocus(Double focus) { 61 | this.focus = focus; 62 | } 63 | 64 | public int getSpread() { 65 | return spread; 66 | } 67 | 68 | public void setSpread(int spread) { 69 | this.spread = spread; 70 | } 71 | 72 | public int getnFiles() { 73 | return fileNames.size(); 74 | } 75 | 76 | public Long getId() { 77 | return id; 78 | } 79 | 80 | public int getNumFiles() { 81 | return numFiles; 82 | } 83 | 84 | public void setNumFiles(int numFiles) { 85 | this.numFiles = numFiles; 86 | } 87 | 88 | public String getRepositoryName() { 89 | return repositoryName; 90 | } 91 | 92 | public void setRepositoryName(String repositoryName) { 93 | this.repositoryName = repositoryName; 94 | } 95 | 96 | public Double getSpreadNormalized() { 97 | return spreadNormalized; 98 | } 99 | 100 | public void setSpreadNormalized(Double spreadNormalized) { 101 | this.spreadNormalized = spreadNormalized; 102 | } 103 | 104 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/FileAuthors.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | import java.util.List; 4 | 5 | public class FileAuthors { 6 | private String fileName; 7 | private String mainAuthor; 8 | private List developers; 9 | 10 | 11 | 12 | public FileAuthors(String fileName, String mainAuthor) { 13 | super(); 14 | this.fileName = fileName; 15 | this.mainAuthor = mainAuthor; 16 | } 17 | public String getFileName() { 18 | return fileName; 19 | } 20 | public void setFileName(String fileName) { 21 | this.fileName = fileName; 22 | } 23 | public String getMainAuthor() { 24 | return mainAuthor; 25 | } 26 | public void setMainAuthor(String mainAuthor) { 27 | this.mainAuthor = mainAuthor; 28 | } 29 | public List getDevelopers() { 30 | return developers; 31 | } 32 | public void setDevelopers(List developers) { 33 | this.developers = developers; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/Repository.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import javax.persistence.CascadeType; 9 | import javax.persistence.Column; 10 | import javax.persistence.Entity; 11 | import javax.persistence.EnumType; 12 | import javax.persistence.Enumerated; 13 | import javax.persistence.GeneratedValue; 14 | import javax.persistence.GenerationType; 15 | import javax.persistence.Id; 16 | import javax.persistence.OneToMany; 17 | import javax.persistence.Transient; 18 | 19 | 20 | @Entity 21 | public class Repository { 22 | @Id 23 | @GeneratedValue(strategy = GenerationType.AUTO) 24 | protected Long id; 25 | 26 | @Column(unique=true) 27 | private String fullName; 28 | 29 | @OneToMany(cascade = { CascadeType.ALL }) 30 | private List files; 31 | @OneToMany(cascade = { CascadeType.REFRESH }) 32 | private List developers = new ArrayList(); 33 | // @OneToMany(cascade = { CascadeType.ALL }) 34 | // private List authorships = new ArrayList();; 35 | 36 | 37 | 38 | // @javax.persistence.OneToMany(cascade = CascadeType.ALL) 39 | // @javax.persistence.MapKey(name = "id") 40 | @Transient 41 | private Map developerMap = new HashMap(); 42 | 43 | // @javax.persistence.OneToMany(cascade = CascadeType.ALL) 44 | // @javax.persistence.MapKey(name = "id") 45 | @Transient 46 | private Map authorshipInfoMap = new HashMap(); 47 | 48 | @Enumerated(EnumType.STRING) 49 | private RepositoryStatus status; 50 | 51 | public Repository() { 52 | } 53 | public Repository(String fullName) { 54 | this.fullName = fullName; 55 | } 56 | 57 | private Developer addDeveloper(String name, String email, String userName) { 58 | Developer developer; 59 | // String userName = Developer.createUserName(name, email); 60 | if(developerMap.containsKey(userName)) 61 | developer = developerMap.get(userName); 62 | else{ 63 | developer = new Developer(name, email, userName); 64 | developerMap.put(userName, developer); 65 | developers.add(developer); 66 | } 67 | return developer; 68 | 69 | } 70 | 71 | private Developer addDeveloper(String userName) { 72 | Developer developer; 73 | // String userName = Developer.createUserName(name, email); 74 | if(developerMap.containsKey(userName)) 75 | developer = developerMap.get(userName); 76 | else{ 77 | developer = new Developer(userName); 78 | developerMap.put(userName, developer); 79 | developers.add(developer); 80 | } 81 | return developer; 82 | 83 | } 84 | 85 | public AuthorshipInfo getAuthorshipInfo(String name, String email, String userName, File file) { 86 | Developer developer = this.addDeveloper(name, email, userName); 87 | String authorshipKey = (file.getPath() + developer.getNewUserName()); 88 | AuthorshipInfo authorshipInfo; 89 | if(authorshipInfoMap.containsKey(authorshipKey)) 90 | authorshipInfo = authorshipInfoMap.get(authorshipKey); 91 | else { 92 | authorshipInfo = new AuthorshipInfo(file, developer); 93 | authorshipInfoMap.put(authorshipKey, authorshipInfo); 94 | // authorships.add(authorshipInfo); 95 | } 96 | return authorshipInfo; 97 | } 98 | 99 | 100 | 101 | 102 | 103 | public String getFullName() { 104 | return fullName; 105 | } 106 | public void setFullName(String fullName) { 107 | this.fullName = fullName; 108 | } 109 | public List getFiles() { 110 | return files; 111 | } 112 | public void setFiles(List files) { 113 | this.files = files; 114 | } 115 | public Long getId() { 116 | return id; 117 | } 118 | 119 | public Map getAuthorshipInfoMap() { 120 | return authorshipInfoMap; 121 | } 122 | 123 | public void setAuthorshipInfoMap(Map authorshipInfoMap) { 124 | this.authorshipInfoMap = authorshipInfoMap; 125 | } 126 | public List getDevelopers() { 127 | return developers; 128 | } 129 | public void setDevelopers(List developers) { 130 | this.developers = developers; 131 | } 132 | // public List getAuthorships() { 133 | // return authorships; 134 | // } 135 | // public void setAuthorships(List authorships) { 136 | // this.authorships = authorships; 137 | // } 138 | public RepositoryStatus getStatus() { 139 | return status; 140 | } 141 | public void setStatus(RepositoryStatus status) { 142 | this.status = status; 143 | } 144 | 145 | 146 | 147 | 148 | 149 | } 150 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/model/authorship/RepositoryStatus.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.model.authorship; 2 | 3 | 4 | public enum RepositoryStatus { 5 | NULL, ERROR, DOA_CALCULATED, DOA_CALCULATING, ANALYZING, ANALYZED, REMOVED, RECALC; 6 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/task/AbstractTask.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.task; 2 | 3 | import java.io.IOException; 4 | 5 | public abstract class AbstractTask { 6 | protected String repositoryPath; 7 | protected String repositoryName; 8 | protected String fileName; 9 | 10 | public AbstractTask(String repositoryPath, String repositoryName) { 11 | super(); 12 | this.repositoryPath = repositoryPath; 13 | this.repositoryName = repositoryName; 14 | } 15 | 16 | public AbstractTask(String fileName, String repositoryPath, String repositoryName) { 17 | super(); 18 | this.fileName = fileName; 19 | this.repositoryPath = repositoryPath; 20 | this.repositoryName = repositoryName; 21 | } 22 | 23 | public abstract T execute() throws Exception; 24 | public abstract void persist(T objects) throws IOException; 25 | } 26 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/task/extractor/FileInfoExtractor.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.task.extractor; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | import org.apache.log4j.Logger; 10 | 11 | import aserg.gtf.dao.NewFileInfoDAO; 12 | import aserg.gtf.model.NewFileInfo; 13 | import aserg.gtf.task.AbstractTask; 14 | 15 | public class FileInfoExtractor extends AbstractTask>{ 16 | private static final Logger LOGGER = Logger.getLogger(FileInfoExtractor.class); 17 | 18 | public FileInfoExtractor(String repositoryPath, String repositoryName) { 19 | super("filelist.log", repositoryPath, repositoryName); 20 | } 21 | 22 | public List execute() throws Exception{ 23 | List files = new ArrayList(); 24 | try { 25 | LOGGER.info(repositoryName + ": Extracting file information..."); 26 | BufferedReader br = new BufferedReader(new FileReader(repositoryPath 27 | + fileName)); 28 | String sCurrentLine; 29 | while ((sCurrentLine = br.readLine()) != null) { 30 | files.add(new NewFileInfo(repositoryName, sCurrentLine)); 31 | } 32 | br.close(); 33 | } catch (Exception e) { 34 | throw new Exception("Error in project "+repositoryName,e); 35 | } 36 | return files; 37 | } 38 | 39 | public void persist(List files) throws IOException { 40 | NewFileInfoDAO fiDAO = new NewFileInfoDAO(); 41 | try{ 42 | fiDAO.persistAll(files); 43 | } 44 | catch(Exception e){ 45 | LOGGER.error("Error in fileInfo extraction \n",e); 46 | } 47 | finally{ 48 | fiDAO.clear(); 49 | } 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/task/extractor/GitLogExtractor.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.task.extractor; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileInputStream; 5 | import java.io.FileNotFoundException; 6 | import java.io.FileReader; 7 | import java.io.IOException; 8 | import java.io.InputStreamReader; 9 | import java.sql.Timestamp; 10 | import java.util.Date; 11 | import java.util.HashMap; 12 | import java.util.Map; 13 | 14 | import org.apache.commons.lang3.StringUtils; 15 | import org.apache.log4j.Logger; 16 | 17 | import aserg.gtf.dao.LogCommitDAO; 18 | import aserg.gtf.model.LogCommitFileInfo; 19 | import aserg.gtf.model.LogCommitInfo; 20 | import aserg.gtf.task.AbstractTask; 21 | 22 | public class GitLogExtractor extends AbstractTask>{ 23 | private static final Logger LOGGER = Logger.getLogger(GitLogExtractor.class); 24 | 25 | public GitLogExtractor(String repositoryPath, String repositoryName) { 26 | super("commitinfo.log", repositoryPath, repositoryName); 27 | } 28 | 29 | 30 | static String path = ""; 31 | 32 | 33 | public Map execute() throws Exception{ 34 | Map mapCommits = new HashMap(); 35 | int countcfs = 0; 36 | try{ 37 | LOGGER.info("Extracting logCommits... "+repositoryPath); 38 | BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(repositoryPath + fileName), "UTF8")); 39 | String sCurrentLine; 40 | String[] values; 41 | while ((sCurrentLine = br.readLine()) != null) { 42 | sCurrentLine = StringUtils.stripAccents(sCurrentLine); 43 | values = sCurrentLine.split("-;-"); 44 | values = removeSemicolon(values, "&"); 45 | if (values.length<7 || values.length>8) 46 | System.err.println("Problem in line " + countcfs + ". Wrong number of columns."); 47 | Date authorDate = !values[3].isEmpty() ? new Timestamp(Long.parseLong(values[3]) * 1000L) : null; 48 | Date commiterDate = !values[6].isEmpty() ? new Timestamp(Long.parseLong(values[6]) * 1000L) : null; 49 | if (authorDate == null && commiterDate == null){ 50 | System.err.println("Commit without date. Ignoring commit: "+values[0]); 51 | continue; 52 | } 53 | String msg = (values.length == 8) ? values[7] : ""; 54 | 55 | countcfs++; 56 | 57 | if ((values[1]+values[2]+values[4]+values[5]).isEmpty()){ 58 | System.err.println("Ignoring commit without developer info in " + values[0]); 59 | continue; 60 | } 61 | mapCommits.put(values[0], 62 | new LogCommitInfo(repositoryName, 63 | values[0], values[1], values[2], 64 | authorDate, values[4], values[5], 65 | commiterDate, msg)); 66 | // System.out.println(countcfs); 67 | } 68 | insertFiles(repositoryName, mapCommits); 69 | br.close(); 70 | 71 | } 72 | catch(FileNotFoundException e ){ 73 | throw new Exception("File not found: " + repositoryPath + fileName, e); 74 | } 75 | catch(Exception e ){ 76 | throw new Exception(String.format("Error in file %s, line %d", repositoryName, countcfs)); 77 | } 78 | 79 | return mapCommits; 80 | 81 | } 82 | 83 | // Remove internal semicolon character. Useful to further data process 84 | private String[] removeSemicolon(String[] values, String newStr) { 85 | String[] newValues = new String[values.length]; 86 | int i = 0; 87 | for (String value : values) { 88 | newValues[i++] = value.replace(";", newStr); 89 | } 90 | return newValues; 91 | } 92 | 93 | 94 | public void persist(Map map) throws IOException { 95 | LogCommitDAO lcDAO = new LogCommitDAO(); 96 | try{ 97 | lcDAO.persistAll(map.values()); 98 | } 99 | catch(Exception e){ 100 | LOGGER.error("Error in fileInfo extraction", e); 101 | } 102 | finally{ 103 | lcDAO.clear(); 104 | } 105 | 106 | } 107 | 108 | private void insertFiles(String projectName, Map mapCommit) throws IOException{ 109 | LOGGER.info(projectName+": Extracting logCommitFiles..."); 110 | BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(repositoryPath+"commitfileinfo.log"), "UTF8")); 111 | String sCurrentLine; 112 | String[] values; 113 | 114 | while ((sCurrentLine = br.readLine()) != null) { 115 | values = sCurrentLine.split(";"); 116 | String sha = values[0]; 117 | if (mapCommit.containsKey(sha)){ 118 | LogCommitInfo commit = mapCommit.get(sha); 119 | commit.addCommitFile(new LogCommitFileInfo(commit, values[1], values[2], values[3])); 120 | } 121 | else 122 | System.err.println("Ignoring file " + values[3] + " Sha: "+sha); 123 | } 124 | br.close(); 125 | } 126 | 127 | 128 | 129 | 130 | 131 | 132 | } 133 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/task/extractor/LinguistExtractor.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.task.extractor; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileNotFoundException; 5 | import java.io.FileReader; 6 | import java.io.IOException; 7 | import java.util.ArrayList; 8 | import java.util.Date; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | import java.util.Map.Entry; 13 | 14 | import org.apache.log4j.Logger; 15 | 16 | import aserg.gtf.dao.NewFileInfoDAO; 17 | import aserg.gtf.model.NewFileInfo; 18 | import aserg.gtf.task.AbstractTask; 19 | 20 | public class LinguistExtractor extends AbstractTask>{ 21 | private static final Logger LOGGER = Logger.getLogger(LinguistExtractor.class); 22 | 23 | public LinguistExtractor(String repositoryPath, String repositoryName) { 24 | super("linguistfiles.log", repositoryPath, repositoryName); 25 | } 26 | 27 | 28 | public List execute() { 29 | List linguistFiles = new ArrayList(); 30 | try { 31 | Map> languageMap = new HashMap>(); 32 | //System.out.format("%s (%s): Extracting file language information...\n",repositoryName, new Date()); 33 | BufferedReader br = new BufferedReader(new FileReader(repositoryPath 34 | + fileName)); 35 | String sCurrentLine; 36 | String[] values; 37 | while ((sCurrentLine = br.readLine()) != null) { 38 | values = sCurrentLine.split(";"); 39 | String language = values[0]; 40 | if (language.contains("\'")) 41 | language = language.replace("'", "''"); 42 | String path = values[1]; 43 | linguistFiles.add(new NewFileInfo(repositoryName, path, language)); 44 | } 45 | br.close(); 46 | } catch (FileNotFoundException e) { 47 | LOGGER.warn(fileName + " not found. Executing without Linguist filter."); 48 | linguistFiles = null; 49 | } 50 | catch (Exception e) { 51 | LOGGER.error("Erro no projeto "+repositoryName,e); 52 | linguistFiles = null; 53 | } 54 | 55 | return linguistFiles; 56 | } 57 | 58 | public List setNotLinguist(List files) throws IOException{ 59 | 60 | Map linguistFilesMap = new HashMap(); 61 | List linguistFiles = execute(); 62 | if (linguistFiles != null) { 63 | for (NewFileInfo linguistFile : linguistFiles) { 64 | linguistFilesMap.put(linguistFile.getPath(), linguistFile); 65 | } 66 | for (NewFileInfo file : files) { 67 | if (linguistFilesMap.containsKey(file.getPath())) { 68 | file.setLanguage(linguistFilesMap.get(file.getPath()) 69 | .getLanguage()); 70 | } else { 71 | file.setFiltered(true); 72 | file.setFilterInfo("NOTLINGUIST"); 73 | } 74 | } 75 | } 76 | return files; 77 | } 78 | 79 | 80 | 81 | public void extractAndPersist() throws IOException { 82 | NewFileInfoDAO fiDAO = new NewFileInfoDAO(); 83 | fiDAO.setAllAsNotLinguist(); 84 | List files = execute(); 85 | 86 | try { 87 | Map> languageMap = new HashMap>(); 88 | System.out.format( 89 | "%s (%s): Extracting file language information...", 90 | repositoryName, new Date()); 91 | BufferedReader br = new BufferedReader(new FileReader(repositoryPath 92 | + fileName)); 93 | String sCurrentLine; 94 | String[] values; 95 | while ((sCurrentLine = br.readLine()) != null) { 96 | values = sCurrentLine.split(";"); 97 | String language = values[0]; 98 | if (language.contains("\'")) 99 | language = language.replace("'", "''"); 100 | String path = values[1]; 101 | List paths; 102 | if (languageMap.containsKey(language)) 103 | paths = languageMap.get(language); 104 | else { 105 | paths = new ArrayList(); 106 | languageMap.put(language, paths); 107 | } 108 | paths.add(path); 109 | files.add(new NewFileInfo(repositoryName, path, language)); 110 | } 111 | br.close(); 112 | for (Entry> entry : languageMap.entrySet()) { 113 | fiDAO.updateLanguageFileInfo( 114 | repositoryName, entry.getKey(), 115 | entry.getValue()); 116 | } 117 | } catch (Exception e) { 118 | System.err.println("Erro no projeto "+repositoryName); 119 | System.err.println(e.getMessage()); 120 | } 121 | 122 | 123 | 124 | } 125 | 126 | @Override 127 | public void persist(List files) throws IOException { 128 | NewFileInfoDAO fiDAO = new NewFileInfoDAO(); 129 | try{ 130 | fiDAO.persistAll(files); 131 | } 132 | catch(Exception e){ 133 | System.err.println("Error in fileInfo extraction \n"+e.toString()); 134 | } 135 | finally{ 136 | fiDAO.clear(); 137 | } 138 | } 139 | 140 | 141 | } 142 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/truckfactor/GreedyTruckFactor.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.truckfactor; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Date; 5 | import java.util.HashMap; 6 | import java.util.HashSet; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.Map.Entry; 10 | import java.util.Set; 11 | 12 | import org.apache.log4j.Logger; 13 | 14 | import aserg.gtf.GitTruckFactor; 15 | import aserg.gtf.model.authorship.AuthorshipInfo; 16 | import aserg.gtf.model.authorship.Developer; 17 | import aserg.gtf.model.authorship.File; 18 | import aserg.gtf.model.authorship.Repository; 19 | 20 | public class GreedyTruckFactor extends TruckFactor { 21 | private static final Logger LOGGER = Logger.getLogger(TruckFactor.class); 22 | 23 | private TFInfo tfInfo = new TFInfo(); 24 | 25 | @Override 26 | public TFInfo getTruckFactor(Repository repository) { 27 | Map> authorsMap = getFilesAuthorMap(repository); 28 | //GREDDY TRUCK FACTOR ALGORITHM 29 | int repFilesSize = repository.getFiles().size(); 30 | int factor = 0; 31 | float coverage = 1; 32 | while(authorsMap.size()>0){ 33 | coverage = getCoverage(repFilesSize, authorsMap); 34 | if (coverage> getFilesAuthorMap(Repository repository){ 46 | Map> map = new HashMap>(); 47 | List developers = repository.getDevelopers(); 48 | for (Developer developer : developers) { 49 | Set devFiles = new HashSet(); 50 | List authorships = developer.getAuthorshipInfos(); 51 | for (AuthorshipInfo authorshipInfo : authorships) { 52 | if (authorshipInfo.isDOAAuthor()) 53 | devFiles.add(authorshipInfo.getFile()); 54 | 55 | } 56 | if (devFiles.size()>0) 57 | map.put(developer, devFiles); 58 | } 59 | return map; 60 | } 61 | 62 | private float getCoverage(int repFilesSize, Map> authorsMap) { 63 | Set authorsSet = new HashSet(); 64 | for (Entry> entry : authorsMap.entrySet()) { 65 | for (File file : entry.getValue()) { 66 | authorsSet.add(file); 67 | if(authorsSet.size()==repFilesSize) 68 | return 1f; 69 | } 70 | } 71 | return (float)authorsSet.size()/repFilesSize; 72 | } 73 | 74 | private void removeTopAuthor(int repFilesSize, Map> authorsMap) { 75 | int biggerNumber = 0; 76 | Developer biggerDev = null; 77 | for (Entry> entry : authorsMap.entrySet()) { 78 | if (entry.getValue().size()>biggerNumber){ 79 | biggerNumber = entry.getValue().size(); 80 | biggerDev = entry.getKey(); 81 | } 82 | } 83 | tfInfo.addDeveloper(biggerDev); 84 | authorsMap.remove(biggerDev); 85 | } 86 | 87 | 88 | // //HELP METHODS: Used only for tests propose 89 | 90 | // private void printAuthorsFile(Set set) { 91 | // for (File file : set) { 92 | // System.out.println(file.getPath()); 93 | // } 94 | // 95 | // } 96 | // 97 | // private void printAuthorsMap(Map> authorsMap) { 98 | // for (Entry> entry : authorsMap.entrySet()) { 99 | // System.out.print(entry.getKey() + ": "); 100 | // for (Long fileId : entry.getValue()) { 101 | // System.out.print(fileId + " "); 102 | // } 103 | // System.out.println(); 104 | // } 105 | // 106 | // } 107 | // 108 | // private void printTruckMap(String repName, Map truckMap) { 109 | // Date date = new Date(); 110 | // for (Entry entry : truckMap.entrySet()) { 111 | // System.out.format("%s;%d;%f\n", repName, entry.getKey(), entry.getValue()); 112 | // 113 | // } 114 | // System.out.println("TF Developers: "); 115 | // for (String tfInfo : tfAuthorInfo) { 116 | // System.out.println(tfInfo); 117 | // } 118 | // } 119 | 120 | } 121 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/truckfactor/TFInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.truckfactor; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import aserg.gtf.model.authorship.Developer; 7 | 8 | public class TFInfo { 9 | private int tf; 10 | private int totalFiles; 11 | private float coverage; 12 | private List tfDevelopers; 13 | 14 | public TFInfo() { 15 | super(); 16 | this.tfDevelopers = new ArrayList(); 17 | } 18 | public void setTf(int tf) { 19 | this.tf = tf; 20 | } 21 | public void setTotalFiles(int totalFiles) { 22 | this.totalFiles = totalFiles; 23 | } 24 | public void setCoverage(float coverage) { 25 | this.coverage = coverage; 26 | } 27 | public void addDeveloper(Developer dev){ 28 | tfDevelopers.add(dev); 29 | } 30 | 31 | public int getTf() { 32 | return tf; 33 | } 34 | public int getTotalFiles() { 35 | return totalFiles; 36 | } 37 | public float getCoverage() { 38 | return coverage; 39 | } 40 | public List getTfDevelopers() { 41 | return tfDevelopers; 42 | } 43 | @Override 44 | public String toString() { 45 | String retStr = String.format("TF = %d (coverage = %.2f%%)\n", tf, coverage*100); 46 | retStr += "TF authors (Developer;Files;Percentage):\n"; 47 | for (Developer developer : tfDevelopers) { 48 | int devFiles = developer.getAuthorshipFiles().size(); 49 | retStr += String.format("%s;%d;%.2f\n",developer.getName(),devFiles,(float)devFiles/totalFiles*100); 50 | } 51 | return retStr; 52 | } 53 | public String getFormatedInfo(String repository){ 54 | String retStr = String.format("%s;*TF*;%d;%d\n", repository, tf, totalFiles); 55 | if(Float.isNaN(coverage)) 56 | coverage = 0; 57 | retStr += String.format("%s;*Coverage*;%.2f;%d\n", repository, coverage*100, Math.round(totalFiles*coverage)); 58 | 59 | for (Developer developer : tfDevelopers) { 60 | int devFiles = developer.getAuthorshipFiles().size(); 61 | retStr += String.format("%s;%s;%.2f;%d\n", repository, developer.getName(),(float)devFiles/totalFiles*100, devFiles); 62 | } 63 | return retStr; 64 | } 65 | public String getSimpleFormatedInfo(String repository){ 66 | String retStr = ""; 67 | for (Developer developer : tfDevelopers) { 68 | int devFiles = developer.getAuthorshipFiles().size(); 69 | retStr += String.format("%s;%s;%.2f;%d**", repository, developer.getName(),(float)devFiles/totalFiles*100, devFiles); 70 | } 71 | return retStr; 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/truckfactor/TruckFactor.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.truckfactor; 2 | 3 | import aserg.gtf.model.authorship.Repository; 4 | 5 | public abstract class TruckFactor { 6 | 7 | public TruckFactor() { 8 | } 9 | 10 | public abstract TFInfo getTruckFactor(Repository repository); 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/Alias.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | import com.google.common.io.LineReader; 10 | 11 | public class Alias { 12 | private String repository; 13 | private String dev1; 14 | private String dev2; 15 | 16 | public Alias(String repository, String dev1, String dev2) { 17 | super(); 18 | this.repository = repository; 19 | this.dev1 = dev1; 20 | this.dev2 = dev2; 21 | } 22 | 23 | public static List getAliasFromFile(String fileName) throws IOException{ 24 | List fileAliases = new ArrayList(); 25 | BufferedReader br = new BufferedReader(new FileReader(fileName)); 26 | LineReader lineReader = new LineReader(br); 27 | String sCurrentLine; 28 | String[] values; 29 | int countcfs = 0; 30 | while ((sCurrentLine = lineReader.readLine()) != null) { 31 | values = sCurrentLine.split(";"); 32 | if (values.length<3) 33 | System.err.println("Erro na linha " + countcfs); 34 | String rep = values[0]; 35 | String dev1 = values[1]; 36 | String dev2 = values[2]; 37 | fileAliases.add(new Alias(rep, dev1, dev2)); 38 | countcfs++; 39 | } 40 | return fileAliases; 41 | } 42 | 43 | public static boolean isAlias(String repository, String dev1, String dev2){ 44 | if (notAliases == null) 45 | try { 46 | notAliases = readFile("notalias.txt"); 47 | } catch (IOException e) { 48 | // TODO Auto-generated catch block 49 | e.printStackTrace(); 50 | } 51 | Alias newNot = new Alias(repository, dev1, dev2); 52 | for (int i = 0; i < notAliases.length; i++) { 53 | if (notAliases[i].equals(newNot)) 54 | return false; 55 | } 56 | return true; 57 | } 58 | @Override 59 | public boolean equals(Object obj) { 60 | Alias other = (Alias)obj; 61 | if(this.repository.equals(other.repository) && this.dev1.equals(other.dev1) && this.dev2.equals(other.dev2)) 62 | return true; 63 | return false; 64 | } 65 | 66 | private static Alias[] readFile(String fileName) throws IOException{ 67 | List fileAliases = new ArrayList(); 68 | BufferedReader br = new BufferedReader(new FileReader(fileName)); 69 | LineReader lineReader = new LineReader(br); 70 | String sCurrentLine; 71 | String[] values; 72 | int countcfs = 0; 73 | while ((sCurrentLine = lineReader.readLine()) != null) { 74 | values = sCurrentLine.split(";"); 75 | if (values.length<3) 76 | System.err.println("Erro na linha " + countcfs); 77 | String rep = values[0]; 78 | String dev1 = values[1]; 79 | String dev2 = values[2]; 80 | fileAliases.add(new Alias(rep, dev1, dev2)); 81 | countcfs++; 82 | } 83 | return fileAliases.toArray(new Alias[0]); 84 | } 85 | 86 | public String getRepository() { 87 | return repository; 88 | } 89 | 90 | public String getDev1() { 91 | return dev1; 92 | } 93 | 94 | public String getDev2() { 95 | return dev2; 96 | } 97 | 98 | private static Alias[] notAliases = null; 99 | // {new NotAlias("rails/rails","Nick", "rick"), new NotAlias("rails/rails","Nick", "Nico"), 100 | // new NotAlias("ruby/ruby","kou", "knu"), new NotAlias("ruby/ruby","kou", "ko1"),new NotAlias("ruby/ruby","nahi", "nari"), 101 | // new NotAlias("ruby/ruby","eban", "evan")}; 102 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/CRLFLineReader.java: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Licensed to the Apache Software Foundation (ASF) under one or more 4 | * contributor license agreements. See the NOTICE file distributed with 5 | * this work for additional information regarding copyright ownership. 6 | * The ASF licenses this file to You under the Apache License, Version 2.0 7 | * (the "License"); you may not use this file except in compliance with 8 | * the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | package aserg.gtf.util; 20 | 21 | import java.io.BufferedReader; 22 | import java.io.IOException; 23 | import java.io.Reader; 24 | 25 | /** 26 | * CRLFLineReader implements a readLine() method that requires 27 | * exactly CRLF to terminate an input line. 28 | * This is required for IMAP, which allows bare CR and LF. 29 | * 30 | * @since 3.0 31 | */ 32 | public final class CRLFLineReader extends BufferedReader 33 | { 34 | private static final char LF = '\n'; 35 | private static final char CR = '\r'; 36 | 37 | /** 38 | * Creates a CRLFLineReader that wraps an existing Reader 39 | * input source. 40 | * @param reader The Reader input source. 41 | */ 42 | public CRLFLineReader(Reader reader) 43 | { 44 | super(reader); 45 | } 46 | 47 | /** 48 | * Read a line of text. 49 | * A line is considered to be terminated by carriage return followed immediately by a linefeed. 50 | * This contrasts with BufferedReader which also allows other combinations. 51 | * @since 3.0 52 | */ 53 | @Override 54 | public String readLine() throws IOException { 55 | StringBuilder sb = new StringBuilder(); 56 | int intch; 57 | boolean prevWasCR = false; 58 | synchronized(lock) { // make thread-safe (hopefully!) 59 | while((intch = read()) != -1) 60 | { 61 | if (prevWasCR && intch == LF) { 62 | return sb.substring(0, sb.length()-1); 63 | } 64 | if (intch == CR) { 65 | prevWasCR = true; 66 | } else { 67 | prevWasCR = false; 68 | } 69 | sb.append((char) intch); 70 | } 71 | } 72 | String string = sb.toString(); 73 | if (string.length() == 0) { // immediate EOF 74 | return null; 75 | } 76 | return string; 77 | } 78 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/ConfigInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | public class ConfigInfo { 4 | private float normalizedDOA; 5 | private float absoluteDOA; 6 | private float tfCoverage; 7 | private float minPercentage; 8 | 9 | public ConfigInfo(float normalizedDOA, float absoluteDOA, float tfCoverage, float minPercentage) { 10 | super(); 11 | this.normalizedDOA = normalizedDOA; 12 | this.absoluteDOA = absoluteDOA; 13 | this.tfCoverage = tfCoverage; 14 | this.minPercentage = minPercentage; 15 | } 16 | 17 | public float getNormalizedDOA() { 18 | return normalizedDOA; 19 | } 20 | public float getAbsoluteDOA() { 21 | return absoluteDOA; 22 | } 23 | public float getTfCoverage() { 24 | return tfCoverage; 25 | } 26 | 27 | public float getMinPercentage() { 28 | return minPercentage; 29 | } 30 | 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/Directory.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | import java.util.Map.Entry; 7 | 8 | public class Directory{ 9 | private String name; 10 | private Map directoryMap; 11 | 12 | public Directory(String name, Map directoryMap) { 13 | super(); 14 | this.name = name; 15 | this.directoryMap = directoryMap; 16 | } 17 | public Directory(String name) { 18 | super(); 19 | this.name = name; 20 | this.directoryMap = new HashMap(); 21 | } 22 | public String getName() { 23 | return name; 24 | } 25 | public void setName(String name) { 26 | this.name = name; 27 | } 28 | public Map getDirectoryMap() { 29 | return directoryMap; 30 | } 31 | public void setDirectoryMap(Map directoryMap) { 32 | this.directoryMap = directoryMap; 33 | } 34 | public String toJson(){ 35 | String str = "{\"name\": \"" + name+ "\",\n\"children\" :[\n"; 36 | int count = 0; 37 | for (Entry entry : directoryMap.entrySet()) { 38 | str += entry.getValue().toJson(); 39 | if (count++<(directoryMap.size()-1)) 40 | str += ",\n"; 41 | } 42 | str+= "]}"; 43 | return str; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/FileDirectory.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | 4 | public class FileDirectory extends Directory{ 5 | private String author; 6 | 7 | 8 | public FileDirectory(String name, String author) { 9 | super(name, null); 10 | this.author = author; 11 | } 12 | 13 | public String getAuthor() { 14 | return author; 15 | } 16 | 17 | public void setAuthor(String author) { 18 | this.author = author; 19 | } 20 | @Override 21 | public String toJson(){ 22 | String str = "{\"name\": \"" + this.getName()+ "\",\"author\" :"+ "\"" + author +"\"}"; 23 | return str; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/FileInfoReader.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | import java.util.ArrayList; 7 | import java.util.Arrays; 8 | import java.util.HashMap; 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | import com.google.common.io.LineReader; 13 | 14 | public class FileInfoReader { 15 | 16 | public static Map> getFileInfo(String fileName) throws IOException{ 17 | Map> fileInfoMap = new HashMap>(); 18 | BufferedReader br = new BufferedReader(new FileReader(fileName)); 19 | LineReader lineReader = new LineReader(br); 20 | String sCurrentLine; 21 | String[] values; 22 | int countcfs = 0; 23 | while ((sCurrentLine = lineReader.readLine()) != null) { 24 | if (sCurrentLine.startsWith("#")) 25 | continue; 26 | values = sCurrentLine.split(";"); 27 | if (values.length<3) 28 | System.err.println("Erro na linha " + countcfs); 29 | String rep = values[0]; 30 | if (!fileInfoMap.containsKey(rep)) { 31 | fileInfoMap.put(rep, new ArrayList()); 32 | } 33 | fileInfoMap.get(rep).add(new LineInfo(rep, Arrays.asList(values).subList(1, values.length))); 34 | } 35 | //lineReader.close(); 36 | return fileInfoMap; 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/FormatDoaDistribution.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | import java.util.List; 4 | 5 | import aserg.gtf.dao.authorship.RepositoryDAO; 6 | import aserg.gtf.model.authorship.FileAuthors; 7 | 8 | public class FormatDoaDistribution { 9 | 10 | 11 | 12 | public static void main(String[] args) { 13 | RepositoryDAO repDAO = new RepositoryDAO(); 14 | List fileAuthors = repDAO.getFilesAuthorList("activeadmin/activeadmin"); 15 | Directory mainDirectory = new Directory("Main"); 16 | for (FileAuthors fileAuthor : fileAuthors) { 17 | String names[] = fileAuthor.getFileName().split("/"); 18 | insert(mainDirectory, names, fileAuthor.getMainAuthor()); 19 | } 20 | System.out.println(mainDirectory.toJson()); 21 | } 22 | 23 | private static void insert(Directory mainDirectory, String[] names, String author) { 24 | Directory insertDirectory = mainDirectory; 25 | for(int i=0;i<(names.length-1); i++ ){ 26 | if (!insertDirectory.getDirectoryMap().containsKey(names[i])) 27 | insertDirectory.getDirectoryMap().put(names[i], new Directory(names[i])); 28 | insertDirectory = insertDirectory.getDirectoryMap().get(names[i]); 29 | } 30 | String fileName = names[names.length-1]; 31 | insertDirectory.getDirectoryMap().put(fileName, new FileDirectory(fileName, author)); 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /gittruckfactor/src/aserg/gtf/util/LineInfo.java: -------------------------------------------------------------------------------- 1 | package aserg.gtf.util; 2 | 3 | import java.util.List; 4 | 5 | public class LineInfo{ 6 | private String repositoryName; 7 | private List values; 8 | 9 | public LineInfo(String repositoryName, List values) { 10 | super(); 11 | this.repositoryName = repositoryName; 12 | this.values = values; 13 | } 14 | public String getRepositoryName() { 15 | return repositoryName; 16 | } 17 | public List getValues() { 18 | return values; 19 | } 20 | } -------------------------------------------------------------------------------- /gittruckfactor/target/classes/META-INF/persistence.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | org.eclipse.persistence.jpa.PersistenceProvider 9 | 10 | aserg.gtf.model.ProjectInfo 11 | aserg.gtf.model.LanguageInfo 12 | aserg.gtf.model.NewFileInfo 13 | aserg.gtf.model.LogCommitInfo 14 | aserg.gtf.model.LogCommitFileInfo 15 | aserg.gtf.model.authorship.Repository 16 | aserg.gtf.model.authorship.Developer 17 | aserg.gtf.model.authorship.File 18 | aserg.gtf.model.authorship.AuthorshipInfo 19 | aserg.gtf.model.authorship.DeveloperAuthorshipInfo 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /meta/parse_original.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import csv 3 | import json 4 | 5 | filename = 'output.csv' 6 | 7 | with open(filename, 'r') as fh: 8 | json_array = [] 9 | csv_reader = csv.DictReader(fh) 10 | for row in csv_reader: 11 | json_array.append(row) 12 | 13 | with open('original_results.json', 'w') as fh: 14 | json_string = json.dumps(json_array, indent=4) 15 | fh.write(json_string) 16 | -------------------------------------------------------------------------------- /meta/parse_results.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import glob 4 | import json 5 | import re 6 | 7 | result_files = glob.glob('../gittruckfactor/results_linguist/*.txt') 8 | 9 | records = {} 10 | 11 | first_line_pattern = r'TF = (\d+) \(coverage = ([\d.]+)%\)' 12 | contrib_pattern = r'([^;]+);(\d+);([\d.]+)' 13 | 14 | for file in result_files: 15 | filename = file.split('/')[-1] 16 | result = {'developers': []} 17 | with open(file, 'r') as fh: 18 | for line in fh: 19 | # first line 20 | match = re.search(first_line_pattern, line) 21 | contrib_match = re.search(contrib_pattern, line) 22 | if match: 23 | result['tf'] = int(match.group(1)) 24 | result['coverage'] = float(match.group(2)) 25 | elif contrib_match: 26 | name = contrib_match.group(1) 27 | files = int(contrib_match.group(2)) 28 | percentage = float(contrib_match.group(3)) 29 | result['developers'].append({'name': name, 'file_count': files, 'percentage': percentage}) 30 | records[filename] = result 31 | 32 | with open('results_linguist.json', 'w') as fh: 33 | json.dump(records, fh, indent=2, sort_keys=True) 34 | --------------------------------------------------------------------------------