From d0914938454ef4ff7c11b977547c168a20631501 Mon Sep 17 00:00:00 2001 From: Lopera Mendizabal Date: Tue, 16 Apr 2024 15:36:37 +0000 Subject: [PATCH] Subir archivos a 'Second-Assigment' --- .../04c1e62ff1955a0228d1b9b5cca4e0a8d968f3 | Bin 0 -> 52 bytes .../36266bd150f42a86415fe4b82b2d788cb4874a | Bin 0 -> 79 bytes .../3c7041b0cc7a6f30ebd23f3538a7f639d5debd | Bin 0 -> 58 bytes .../4800c8b1477353f4727c317c7390dabbf0a59b | Bin 0 -> 44 bytes .../4fa795c302f639b9aa5f79c26062c39c52b192 | Bin 0 -> 464 bytes .../5c9e6f42bffad4cd6b38187d690110fd6d6ea7 | Bin 0 -> 57 bytes .../872b90f5a12935f47ef63d508ee5e078d2a9dc | Bin 0 -> 56 bytes .../9ac16bb1fc9a6413618919f792f1a27415ac7b | Bin 0 -> 78 bytes Second-Assigment/COMMIT_EDITMSG | 1 + Second-Assigment/Dockerfile | 5 + Second-Assigment/HEAD | 1 + Second-Assigment/README.md | Bin 0 -> 1024 bytes Second-Assigment/applypatch-msg.sample | 15 ++ .../b0b26318a8753cd036652fa404fdf67a58fe0b | Bin 0 -> 58 bytes .../b7911a757bf6e4effc6592ed395cde9f9a59bd | Bin 0 -> 65 bytes .../ba02f4a80edf22aca0e072afb4d921c7065bdb | Bin 0 -> 257 bytes .../c981f490e46784b13d06a9e880e03ba5889ed9 | Bin 0 -> 234 bytes Second-Assigment/commit-msg.sample | 24 +++ Second-Assigment/config | 13 ++ Second-Assigment/dependency-reduced-pom.xml | 56 ++++++ Second-Assigment/description | 1 + .../ef6469d65342b13843b02c8d4f75d58991998a | Bin 0 -> 54 bytes Second-Assigment/exclude | 6 + Second-Assigment/fsmonitor-watchman.sample | 174 ++++++++++++++++++ Second-Assigment/index | Bin 0 -> 18965 bytes ...iginal-productcatalogue-0.0.1-SNAPSHOT.jar | Bin 0 -> 9702 bytes Second-Assigment/packed-refs | 1 + Second-Assigment/pom.xml | 76 ++++++++ Second-Assigment/post-update.sample | 8 + Second-Assigment/pre-applypatch.sample | 14 ++ Second-Assigment/pre-commit.sample | 49 +++++ Second-Assigment/pre-merge-commit.sample | 13 ++ Second-Assigment/pre-push.sample | 53 ++++++ Second-Assigment/pre-rebase.sample | 169 +++++++++++++++++ Second-Assigment/pre-receive.sample | 24 +++ Second-Assigment/prepare-commit-msg.sample | 42 +++++ Second-Assigment/product-catalogue.yml | 10 + .../productcatalogue-service.yaml | 42 +++++ Second-Assigment/push-to-checkout.sample | 78 ++++++++ Second-Assigment/sendemail-validate.sample | 77 ++++++++ .../shopfront-0.0.1-SNAPSHOT.jar.original | Bin 0 -> 16801 bytes Second-Assigment/shopfront-service.yaml | 42 +++++ .../stockmanager-0.0.1-SNAPSHOT.jar.original | Bin 0 -> 10109 bytes Second-Assigment/stockmanager-service.yaml | 42 +++++ Second-Assigment/update.sample | 128 +++++++++++++ 45 files changed, 1164 insertions(+) create mode 100644 Second-Assigment/04c1e62ff1955a0228d1b9b5cca4e0a8d968f3 create mode 100644 Second-Assigment/36266bd150f42a86415fe4b82b2d788cb4874a create mode 100644 Second-Assigment/3c7041b0cc7a6f30ebd23f3538a7f639d5debd create mode 100644 Second-Assigment/4800c8b1477353f4727c317c7390dabbf0a59b create mode 100644 Second-Assigment/4fa795c302f639b9aa5f79c26062c39c52b192 create mode 100644 Second-Assigment/5c9e6f42bffad4cd6b38187d690110fd6d6ea7 create mode 100644 Second-Assigment/872b90f5a12935f47ef63d508ee5e078d2a9dc create mode 100644 Second-Assigment/9ac16bb1fc9a6413618919f792f1a27415ac7b create mode 100644 Second-Assigment/COMMIT_EDITMSG create mode 100644 Second-Assigment/Dockerfile create mode 100644 Second-Assigment/HEAD create mode 100644 Second-Assigment/README.md create mode 100644 Second-Assigment/applypatch-msg.sample create mode 100644 Second-Assigment/b0b26318a8753cd036652fa404fdf67a58fe0b create mode 100644 Second-Assigment/b7911a757bf6e4effc6592ed395cde9f9a59bd create mode 100644 Second-Assigment/ba02f4a80edf22aca0e072afb4d921c7065bdb create mode 100644 Second-Assigment/c981f490e46784b13d06a9e880e03ba5889ed9 create mode 100644 Second-Assigment/commit-msg.sample create mode 100644 Second-Assigment/config create mode 100644 Second-Assigment/dependency-reduced-pom.xml create mode 100644 Second-Assigment/description create mode 100644 Second-Assigment/ef6469d65342b13843b02c8d4f75d58991998a create mode 100644 Second-Assigment/exclude create mode 100644 Second-Assigment/fsmonitor-watchman.sample create mode 100644 Second-Assigment/index create mode 100644 Second-Assigment/original-productcatalogue-0.0.1-SNAPSHOT.jar create mode 100644 Second-Assigment/packed-refs create mode 100644 Second-Assigment/pom.xml create mode 100644 Second-Assigment/post-update.sample create mode 100644 Second-Assigment/pre-applypatch.sample create mode 100644 Second-Assigment/pre-commit.sample create mode 100644 Second-Assigment/pre-merge-commit.sample create mode 100644 Second-Assigment/pre-push.sample create mode 100644 Second-Assigment/pre-rebase.sample create mode 100644 Second-Assigment/pre-receive.sample create mode 100644 Second-Assigment/prepare-commit-msg.sample create mode 100644 Second-Assigment/product-catalogue.yml create mode 100644 Second-Assigment/productcatalogue-service.yaml create mode 100644 Second-Assigment/push-to-checkout.sample create mode 100644 Second-Assigment/sendemail-validate.sample create mode 100644 Second-Assigment/shopfront-0.0.1-SNAPSHOT.jar.original create mode 100644 Second-Assigment/shopfront-service.yaml create mode 100644 Second-Assigment/stockmanager-0.0.1-SNAPSHOT.jar.original create mode 100644 Second-Assigment/stockmanager-service.yaml create mode 100644 Second-Assigment/update.sample diff --git a/Second-Assigment/04c1e62ff1955a0228d1b9b5cca4e0a8d968f3 b/Second-Assigment/04c1e62ff1955a0228d1b9b5cca4e0a8d968f3 new file mode 100644 index 0000000000000000000000000000000000000000..bc6e2469292f49804e47a72c8749b7143ae09335 GIT binary patch literal 52 zcmV-40L%Y)0V^p=O;s>9V=yrQ0)^s?{DQQi{Jau|(!lBWcCVOH9rxAj`L@!d3~dLu KSONfFC=zmFU>Fks literal 0 HcmV?d00001 diff --git a/Second-Assigment/36266bd150f42a86415fe4b82b2d788cb4874a b/Second-Assigment/36266bd150f42a86415fe4b82b2d788cb4874a new file mode 100644 index 0000000000000000000000000000000000000000..69e3d150199579a70d7aa263920df7a431a6632f GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>AVlXiP0)^!K+=9%UR0fWidHGKJe_c77Z6Q&c$tdtQH*Yya lMM-LLi8EBy`8gqW)#WG6w&tqw_snU2b>S4-2LO2bAACWgB(MMg literal 0 HcmV?d00001 diff --git a/Second-Assigment/3c7041b0cc7a6f30ebd23f3538a7f639d5debd b/Second-Assigment/3c7041b0cc7a6f30ebd23f3538a7f639d5debd new file mode 100644 index 0000000000000000000000000000000000000000..4fd7d11f03b86adc6a75ba5ae24061f69ee37930 GIT binary patch literal 58 zcmV-A0LA}!0V^p=O;s>4VlXiP0)>>+w8YY!65Ztd+=9%UR0b9EkRP|7T%E)u`+v`; QCdK_c@AJ+B0J9+!dG6F3xBvhE literal 0 HcmV?d00001 diff --git a/Second-Assigment/4800c8b1477353f4727c317c7390dabbf0a59b b/Second-Assigment/4800c8b1477353f4727c317c7390dabbf0a59b new file mode 100644 index 0000000000000000000000000000000000000000..2c6ff46dbc0c738b5b2b6e3e80e5c26d3bf108fe GIT binary patch literal 44 zcmV+{0Mq|?0V^p=O;s?mWH2!R0)^y!hOD~vtIx>)TWGGOdR(~kj_8Bw4s!tKtqvQn CCKVw7 literal 0 HcmV?d00001 diff --git a/Second-Assigment/4fa795c302f639b9aa5f79c26062c39c52b192 b/Second-Assigment/4fa795c302f639b9aa5f79c26062c39c52b192 new file mode 100644 index 0000000000000000000000000000000000000000..2ac42697e8a8fcac0360e08c35cc7a700027dc94 GIT binary patch literal 464 zcmV;>0Wbb|0i{w+Z__{!eVZnAnx?d*Q0SLLZ)px}4;2ChRiZ(hTtH2g9(r0k+hh}a z*IKXn_*tAl9QXnJD8#HAsXl}gmOP`G**CNM-b9Isp1nMIh2MXE{sM4{!xm~-2~cmN zfmMdBnfN4lBJ_lRh-NZ&46Cn|R_=^prF%RI&}29-<~%lhEVPnIWWNgS_;{92O_nJF z=FY_PRA@1gmJfY!aTmPFvP8wgDWh9xVLd>*jSW0t=ow46%o6<8id23!cFrSX93Pg+ z3X<+&3(XL9!~44q5|QWqn@VQre6#*>xU6$*w3A;P9~gbBCWRGIA}b>(?aO_J`oN4O z!)Bq+wlMS@v~E*=$$*=WzQN>UDydt+g?&8 z9WSJtn(;^B*>uv4VlXiP0)>>+w8YY!65Ztd+=9%URE8(#(<@4ZUe4CvuuykV PhuaO|{H;9zva}PL-VYn@ literal 0 HcmV?d00001 diff --git a/Second-Assigment/872b90f5a12935f47ef63d508ee5e078d2a9dc b/Second-Assigment/872b90f5a12935f47ef63d508ee5e078d2a9dc new file mode 100644 index 0000000000000000000000000000000000000000..a3ee3a76cb804984c2ae36244a905a762966250b GIT binary patch literal 56 zcmV-80LTA$0V^p=O;s>4WH2!R0tEv-13g3CU_ZxzU=RNghOhan)3$Lio)_=Ep($8q O(J=d^j0gZ#iVtrP6%}a! literal 0 HcmV?d00001 diff --git a/Second-Assigment/9ac16bb1fc9a6413618919f792f1a27415ac7b b/Second-Assigment/9ac16bb1fc9a6413618919f792f1a27415ac7b new file mode 100644 index 0000000000000000000000000000000000000000..5304151777db505ddcf53d7f8eae7d4e9ece30b0 GIT binary patch literal 78 zcmV-U0I~mg0V^p=O;s>6WH2-^Ff%bx2q?-=DNQa3PAw|SOip#q&r8cpFD*(e$;{8w kOU_9wE@rT7J;Tv1d}Vk4)%)weT#=pB?3*tE07*d`P&hvyj{pDw literal 0 HcmV?d00001 diff --git a/Second-Assigment/COMMIT_EDITMSG b/Second-Assigment/COMMIT_EDITMSG new file mode 100644 index 0000000..73d2f56 --- /dev/null +++ b/Second-Assigment/COMMIT_EDITMSG @@ -0,0 +1 @@ +Second Assigment diff --git a/Second-Assigment/Dockerfile b/Second-Assigment/Dockerfile new file mode 100644 index 0000000..868a645 --- /dev/null +++ b/Second-Assigment/Dockerfile @@ -0,0 +1,5 @@ +FROM openjdk:8-jre +ADD target/productcatalogue-0.0.1-SNAPSHOT.jar app.jar +ADD product-catalogue.yml app-config.yml +EXPOSE 8020 +ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar", "server", "app-config.yml"] diff --git a/Second-Assigment/HEAD b/Second-Assigment/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/Second-Assigment/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/Second-Assigment/README.md b/Second-Assigment/README.md new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/Second-Assigment/applypatch-msg.sample b/Second-Assigment/applypatch-msg.sample new file mode 100644 index 0000000..a5d7b84 --- /dev/null +++ b/Second-Assigment/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/Second-Assigment/b0b26318a8753cd036652fa404fdf67a58fe0b b/Second-Assigment/b0b26318a8753cd036652fa404fdf67a58fe0b new file mode 100644 index 0000000000000000000000000000000000000000..b1091bf3fa41ae59cf2d749e2c658fa675b82414 GIT binary patch literal 58 zcmV-A0LA}!0V^p=O;s>4W-u`T0)>L2{FKtVn9xRXt@vJ3bC6Dbn?y;~Ur literal 0 HcmV?d00001 diff --git a/Second-Assigment/ba02f4a80edf22aca0e072afb4d921c7065bdb b/Second-Assigment/ba02f4a80edf22aca0e072afb4d921c7065bdb new file mode 100644 index 0000000000000000000000000000000000000000..2d67e49bb62495b8a329b1f2a554c899657a2fd4 GIT binary patch literal 257 zcmV+c0sj7Y0V^p=O;s?mG+{6?00M>NoW$bd)MAE;=Kowi^6{TdnqEtMp0IP1t(fXI zh>G0AveZ1?#G>Sk%(B!XhI`kOq&K|0^TNp4(WKCa$9mEJwmrxSi%SwqN{bo%i+^ja z*;h2}d2%d^)I((l$LopRh6V;^CMF8`MVaZDd5Jl?1x5KOrO749i6x0S`RS#px(0d% zdWO2eevSdb9{wSES&2mq-D06HLw+m@HU3)6aKk}4M)E}wGt?Ynw7--;ysocacJH^w z<41QFyyF*n-TfZoTA=Q%)Z`M~ocv^_5q!z>Diht2aDj)#aL$DUnrC zrJbh0(o`Riu^|Oh2LlF%cIt-QffMk^f%;lUF07|MteLSWQ2KThXZbE4 kxtH`Jnf>#cFN#*lB\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/Second-Assigment/config b/Second-Assigment/config new file mode 100644 index 0000000..2b2b402 --- /dev/null +++ b/Second-Assigment/config @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = git@git.kemt.fei.tuke.sk:al545ig/zkt24.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "main"] + remote = origin + merge = refs/heads/main diff --git a/Second-Assigment/dependency-reduced-pom.xml b/Second-Assigment/dependency-reduced-pom.xml new file mode 100644 index 0000000..3169182 --- /dev/null +++ b/Second-Assigment/dependency-reduced-pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + uk.co.danielbryant.djshopping + productcatalogue + 0.0.1-SNAPSHOT + + + + maven-compiler-plugin + + 1.8 + 1.8 + + + + maven-shade-plugin + + + package + + shade + + + + + + uk.co.danielbryant.djshopping.productcatalogue.ProductServiceApplication + + + + + + + 1.6 + true + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + UTF-8 + 1.3.27 + 4.2.3 + + diff --git a/Second-Assigment/description b/Second-Assigment/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/Second-Assigment/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/Second-Assigment/ef6469d65342b13843b02c8d4f75d58991998a b/Second-Assigment/ef6469d65342b13843b02c8d4f75d58991998a new file mode 100644 index 0000000000000000000000000000000000000000..06ea9bd008a3875fdfa674d97ef716e4617a89f6 GIT binary patch literal 54 zcmV-60LlM&0V^p=O;s?qWH2!R0)>>syv)>`q@v2iyb=bnoWRELw;$>h--Y!peqq6& MSS0fV0Cvt1ot3f~rT_o{ literal 0 HcmV?d00001 diff --git a/Second-Assigment/exclude b/Second-Assigment/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/Second-Assigment/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/Second-Assigment/fsmonitor-watchman.sample b/Second-Assigment/fsmonitor-watchman.sample new file mode 100644 index 0000000..23e856f --- /dev/null +++ b/Second-Assigment/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/Second-Assigment/index b/Second-Assigment/index new file mode 100644 index 0000000000000000000000000000000000000000..9ec04b66d61642105988b2a1e3396f866eaf47a7 GIT binary patch literal 18965 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 literal 0 HcmV?d00001 diff --git a/Second-Assigment/original-productcatalogue-0.0.1-SNAPSHOT.jar b/Second-Assigment/original-productcatalogue-0.0.1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..8b1655e954f8a25533f57300d840235c19e87203 GIT binary patch literal 9702 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 + + 4.0.0 + + uk.co.danielbryant.djshopping + shopfront + 0.0.1-SNAPSHOT + jar + + shopfront + Docker Java application Shopfront + + + org.springframework.boot + spring-boot-starter-parent + 1.5.22.RELEASE + + + + UTF-8 + 1.8 + + + + + + org.springframework.cloud + spring-cloud-dependencies + Dalston.SR5 + pom + import + + + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.cloud + spring-cloud-starter-hystrix + + + org.springframework.cloud + spring-cloud-starter-eureka + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.codehaus.mojo + versions-maven-plugin + + + + + diff --git a/Second-Assigment/post-update.sample b/Second-Assigment/post-update.sample new file mode 100644 index 0000000..ec17ec1 --- /dev/null +++ b/Second-Assigment/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/Second-Assigment/pre-applypatch.sample b/Second-Assigment/pre-applypatch.sample new file mode 100644 index 0000000..4142082 --- /dev/null +++ b/Second-Assigment/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/Second-Assigment/pre-commit.sample b/Second-Assigment/pre-commit.sample new file mode 100644 index 0000000..29ed5ee --- /dev/null +++ b/Second-Assigment/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/Second-Assigment/pre-merge-commit.sample b/Second-Assigment/pre-merge-commit.sample new file mode 100644 index 0000000..399eab1 --- /dev/null +++ b/Second-Assigment/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/Second-Assigment/pre-push.sample b/Second-Assigment/pre-push.sample new file mode 100644 index 0000000..4ce688d --- /dev/null +++ b/Second-Assigment/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/Second-Assigment/pre-rebase.sample b/Second-Assigment/pre-rebase.sample new file mode 100644 index 0000000..6cbef5c --- /dev/null +++ b/Second-Assigment/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/Second-Assigment/pre-receive.sample b/Second-Assigment/pre-receive.sample new file mode 100644 index 0000000..a1fd29e --- /dev/null +++ b/Second-Assigment/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/Second-Assigment/prepare-commit-msg.sample b/Second-Assigment/prepare-commit-msg.sample new file mode 100644 index 0000000..10fa14c --- /dev/null +++ b/Second-Assigment/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/Second-Assigment/product-catalogue.yml b/Second-Assigment/product-catalogue.yml new file mode 100644 index 0000000..466c289 --- /dev/null +++ b/Second-Assigment/product-catalogue.yml @@ -0,0 +1,10 @@ +version: 1.0-SNAPSHOT + + +server: + applicationConnectors: + - type: http + port: 8020 + adminConnectors: + - type: http + port: 8025 \ No newline at end of file diff --git a/Second-Assigment/productcatalogue-service.yaml b/Second-Assigment/productcatalogue-service.yaml new file mode 100644 index 0000000..2bb9992 --- /dev/null +++ b/Second-Assigment/productcatalogue-service.yaml @@ -0,0 +1,42 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: productcatalogue + labels: + app: productcatalogue +spec: + type: NodePort + selector: + app: productcatalogue + ports: + - protocol: TCP + port: 8020 + name: http + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: productcatalogue +spec: + selector: + matchLabels: + app: productcatalogue + replicas: 1 + template: + metadata: + labels: + app: productcatalogue + spec: + containers: + - name: productcatalogue + image: thetips4you/productcatalogue:latest + ports: + - containerPort: 8020 + livenessProbe: + httpGet: + path: /healthcheck + port: 8025 + initialDelaySeconds: 30 + timeoutSeconds: 1 diff --git a/Second-Assigment/push-to-checkout.sample b/Second-Assigment/push-to-checkout.sample new file mode 100644 index 0000000..af5a0c0 --- /dev/null +++ b/Second-Assigment/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/Second-Assigment/shopfront-0.0.1-SNAPSHOT.jar.original b/Second-Assigment/shopfront-0.0.1-SNAPSHOT.jar.original new file mode 100644 index 0000000000000000000000000000000000000000..520d5b367f35f59dfef9abaa314bf168db9c216d GIT binary patch literal 16801 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 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0