From cd87dae37bfd20a3c5b144f1ca4fe4943c50f1bd Mon Sep 17 00:00:00 2001 From: Tanmay Sharma Date: Thu, 14 Mar 2024 23:31:42 +0300 Subject: [PATCH 1/3] Fix Issue Number: 24 - Git Siblings --- steps/git-siblings.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 steps/git-siblings.sh diff --git a/steps/git-siblings.sh b/steps/git-siblings.sh new file mode 100644 index 00000000..288557da --- /dev/null +++ b/steps/git-siblings.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# List all Java files in the repo history +git log --name-only --pretty=format: | grep '\.java$' | sort | uniq > all_java_files.txt + +# Create a file to store the final counts +echo "" > siblings_count.txt + +# Iterate over each Java file and count how many times it appears with others +while read file; do + echo "Analyzing $file..." + # Count how many times each file appears in the same commit as the current file + git log --pretty=format:"%H" --name-only | grep -B1 $file | grep '\.java$' | sort | uniq -c | sort -rn > temp_count.txt + echo "$file: " >> siblings_count.txt + cat temp_count.txt >> siblings_count.txt + echo "" >> siblings_count.txt +done Date: Sun, 17 Mar 2024 18:26:43 +0300 Subject: [PATCH 2/3] Fix the git-siblings.sh --- steps/git-siblings.sh | 47 ++++++++++++++++++++++------- tests/steps/test-git-sibling.sh | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 tests/steps/test-git-sibling.sh diff --git a/steps/git-siblings.sh b/steps/git-siblings.sh index 288557da..d2fd8ab7 100644 --- a/steps/git-siblings.sh +++ b/steps/git-siblings.sh @@ -1,19 +1,46 @@ -#!/bin/bash +#!/usr/bin/env bash +# The MIT License (MIT) +# +# Copyright (c) 2021-2024 Yegor Bugayenko +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +set -e +set -o pipefail + +repo=$1 # List all Java files in the repo history -git log --name-only --pretty=format: | grep '\.java$' | sort | uniq > all_java_files.txt +git -C "${repo}/" log --name-only --pretty=format: | grep '\.java$' | sort | uniq > "${repo}/all_java_files.txt" # Create a file to store the final counts -echo "" > siblings_count.txt +echo "" > "${repo}/siblings_count.txt" # Iterate over each Java file and count how many times it appears with others -while read file; do +while IFS= read -r file; do echo "Analyzing $file..." # Count how many times each file appears in the same commit as the current file - git log --pretty=format:"%H" --name-only | grep -B1 $file | grep '\.java$' | sort | uniq -c | sort -rn > temp_count.txt - echo "$file: " >> siblings_count.txt - cat temp_count.txt >> siblings_count.txt - echo "" >> siblings_count.txt -done "${repo}/temp_count.txt" + { + echo "$file: " + cat "${repo}/temp_count.txt" + echo "" + } >> "${repo}/siblings_count.txt" +done < "${repo}/all_java_files.txt" -echo "Analysis complete. Check siblings_count.txt for results." +echo "Analysis complete. Check siblings_count.txt for results." \ No newline at end of file diff --git a/tests/steps/test-git-sibling.sh b/tests/steps/test-git-sibling.sh new file mode 100644 index 00000000..42b465eb --- /dev/null +++ b/tests/steps/test-git-sibling.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# The MIT License (MIT) +# +# Copyright (c) 2021-2024 Yegor Bugayenko +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +set -e +set -o pipefail + +stdout=$2 + +{ + repo="git-siblings-repo" + dir="${TARGET}/data/${repo}" + mkdir -p "${dir}" + git init "${dir}" + # Add Two Java Files + echo "public class Test1 {}" > "${dir}/Test1.java" + echo "public class Test2 {}" > "${dir}/Test2.java" + git -C "${dir}" add . && git -C "${dir}" commit -m "Add Test1 and Test2" + # Modify Test1.java + echo "// Comment added" >> "${dir}/Test1.java" + git -C "${dir}" add . && git -C "${dir}" commit -m "Modify Test1.java" + + # Add another Java file + echo "public class Test3 {}" > Test3.java + git -C "${dir}" add . && git -C "${dir}" commit -m "Add Test3" + + # Step 3: Verify the Output + if grep -q "Test1.java" "${dir}/siblings_count.txt" && grep -q "Test2.java" "${dir}/siblings_count.txt" && grep -q "Test3.java" "${dir}/siblings_count.txt"; then + echo "Test passed: All expected Java files are present in the analysis." + else + echo "Test failed: Analysis output is missing one or more expected Java files." + fi +} > "${stdout}" 2>&1 +echo "👍🏻 Siblings count verified" \ No newline at end of file From 724f9d2498650e93b210b75fe39d34ea8356d859 Mon Sep 17 00:00:00 2001 From: Tanmay Sharma Date: Mon, 18 Mar 2024 09:52:51 +0300 Subject: [PATCH 3/3] Moved Git Siblings to Metrics --- {steps => metrics}/git-siblings.sh | 0 tests/{steps => metrics}/test-git-sibling.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {steps => metrics}/git-siblings.sh (100%) rename tests/{steps => metrics}/test-git-sibling.sh (100%) diff --git a/steps/git-siblings.sh b/metrics/git-siblings.sh similarity index 100% rename from steps/git-siblings.sh rename to metrics/git-siblings.sh diff --git a/tests/steps/test-git-sibling.sh b/tests/metrics/test-git-sibling.sh similarity index 100% rename from tests/steps/test-git-sibling.sh rename to tests/metrics/test-git-sibling.sh