{"id":16086850,"url":"https://github.com/olekscode/refrain","last_synced_at":"2026-02-24T15:33:00.670Z","repository":{"id":88081509,"uuid":"304013527","full_name":"olekscode/Refrain","owner":"olekscode","description":"A tool for mining repetitive changes from the commit history of Pharo projects","archived":false,"fork":false,"pushed_at":"2021-07-30T11:06:22.000Z","size":108,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T14:43:45.886Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/olekscode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-14T12:50:16.000Z","updated_at":"2021-07-30T11:06:25.000Z","dependencies_parsed_at":"2023-05-18T05:00:11.150Z","dependency_job_id":null,"html_url":"https://github.com/olekscode/Refrain","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/olekscode/Refrain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olekscode%2FRefrain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olekscode%2FRefrain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olekscode%2FRefrain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olekscode%2FRefrain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/olekscode","download_url":"https://codeload.github.com/olekscode/Refrain/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olekscode%2FRefrain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281114578,"owners_count":26446037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-26T02:00:06.575Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-09T13:25:39.817Z","updated_at":"2025-10-26T13:32:51.504Z","avatar_url":"https://github.com/olekscode.png","language":"Smalltalk","readme":"# Refrain\n\n[![Build Status](https://travis-ci.org/olekscode/Refrain.svg?branch=master)](https://travis-ci.org/olekscode/Refrain)\n[![Build status](https://ci.appveyor.com/api/projects/status/89vqb46105kxi3lb?svg=true)](https://ci.appveyor.com/project/olekscode/refrain)\n[![Coverage Status](https://coveralls.io/repos/github/olekscode/Refrain/badge.svg?branch=master)](https://coveralls.io/github/olekscode/Refrain?branch=master)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/olekscode/Refrain/master/LICENSE)\n\n**Refrain** is a tool for mining repetitive changes from the commit history of [Pharo](https://pharo.org/) projects. It is based on the [A-Priori](https://github.com/pharo-ai/APriori) algorithm which goes through the change history of a given project and identifies all possible subsets of co-occuring changes that appear at least N times. For example, if method call to `doWithIndex:` was repetitively replaced with a call to `withIndexDo:` then Refrain will identify `#doWithIndex: -\u003e  #withIndexDo:` as a repetitive change.\n\nIn music and poetry, [_\"refrain\"_](https://en.wikipedia.org/wiki/Refrain) is the repetive phrase or verse, for example, a chorus of a song or repetitive lines in a poem.\n\n\u003e O Captain! my Captain! our fearful trip is done,  \nThe ship has weather’d every rack, the prize we sought is won,  \n...  \nO Captain! my Captain! rise up and hear the bells;  \nRise up—for you the flag is flung—for you the bugle trills,  \n...\n\n\u0026mdash; _extract from [O Captain! My Captain!](https://www.poetryfoundation.org/poems/45474/o-captain-my-captain) by Walt Whitman_\n\n## How to install it?\n\nTo install Refrain, go to the Playground (Ctrl+OW) in your [Pharo](https://pharo.org/) image and execute the following Metacello script (select it and press Do-it button or Ctrl+D):\n\n```Smalltalk\nMetacello new\n  baseline: 'Refrain';\n  repository: 'github://olekscode/Refrain/src';\n  load.\n```\n\n## How to depend on it?\n\nIf you want to add a dependency on Refrain to your project, include the following lines into your baseline method:\n\n```Smalltalk\nspec\n  baseline: 'Refrain'\n  with: [ spec repository: 'github://olekscode/Refrain/src' ].\n```\n\nIf you are new to baselines and Metacello, check out the [Baselines](https://github.com/pharo-open-documentation/pharo-wiki/blob/master/General/Baselines.md) tutorial on Pharo Wiki.\n\n## How to use it?\n\n```Smalltalk\nrefrain := Refrain\n   repositoryName: 'APriori'\n   branchName: 'master'\n   firstCommit: '84ed7471d4a6c0f5c070a6bfe8ab3371f0188035'\n   lastCommit: '57acf893b567393fec7967f0c32306fccda9321d'.\n\nrefrain minNumberOfRepetitions: 2.\nrefrain mineRepetitiveChanges.\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folekscode%2Frefrain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folekscode%2Frefrain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folekscode%2Frefrain/lists"}