1<!DOCTYPE html> 2<html lang="en-US"> 3 <head> 4 <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0" /><link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css1634d4dce8e447e2c70cd0166c761ba9940e6c34d2e9692825788b6db6095.css" as="style" media="all" /> 5<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc7d4732ca9c1511ef3c1f60ee22e1ebc2985905d2521c502e211e29a88714.css" as="style" media="all" /> 6<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssb0b5ded471bb79b105d847c63a7e8426bc82d4c9e4caa6e3cdcd1307d7a41.css" as="style" media="all" /> 7<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css29e86ce1442e3eaf51b5c2cadb8f5eb63532c3e60f3353e18aea6976f9d26.css" as="style" media="all" /> 8<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc0e2b5a81747928ecfda68e4b767dbb5a4236f3070d862e87849fc80f0564.css" as="style" media="all" /> 9<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css408638780cced6081b56e3badc186475902f92e43428fb7f74a81f7f66a92.css" as="style" media="all" /> 10<link rel="preload" href="https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssa0643b4e3ad9323ceb09416f88ee34fa695b9d321cf83b1dc8749f7265f4d.css" as="style" media="all" />
10<script data-cfasync="false">if(navigator.userAgent.match(/MSIE|Internet Explorer/i)||navigator.userAgent.match(/Trident\/7\..*?rv:11/i)){var href=document.location.href;if(!href.match(/[?&]iebrowser/)){if(href.indexOf("?")==-1){if(href.indexOf("#")==-1){document.location.href=href+"?iebrowser=1"}else{document.location.href=href.replace("#","?iebrowser=1#")}}else{if(href.indexOf("#")==-1){document.location.href=href+"&iebrowser=1"}else{document.location.href=href.replace("#","&iebrowser=1#")}}}}</script>
vendor: 2 bytes, line 10
10
11<script data-cfasync="false">class FVMLoader{constructor(e){this.triggerEvents=e,this.eventOptions={passive:!0},this.userEventListener=this.triggerListener.bind(this),this.delayedScripts={normal:[],async:[],defer:[]},this.allJQueries=[]}_addUserInteractionListener(e){this.triggerEvents.forEach(t=>window.addEventListener(t,e.userEventListener,e.eventOptions))}_removeUserInteractionListener(e){this.triggerEvents.forEach(t=>window.removeEventListener(t,e.userEventListener,e.eventOptions))}triggerListener(){this._removeUserInteractionListener(this),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",this._loadEverythingNow.bind(this)):this._loadEverythingNow()}async _loadEverythingNow(){this._runAllDelayedCSS(),this._delayEventListeners(),this._delayJQueryReady(this),this._handleDocumentWrite(),this._registerAllDelayedScripts(),await this._loadScriptsFromList(this.delayedScripts.normal),await this._loadScriptsFromList(this.delayedScripts.defer),await this._loadScriptsFromList(this.delayedScripts.async),await this._triggerDOMContentLoaded(),await this._triggerWindowLoad(),window.dispatchEvent(new Event("wpr-allScriptsLoaded"))}_registerAllDelayedScripts(){document.querySelectorAll("script[type=fvmdelay]").forEach(e=>{e.hasAttribute("src")?e.hasAttribute("async")&&!1!==e.async?this.delayedScripts.async.push(e):e.hasAttribute("defer")&&!1!==e.defer||"module"===e.getAttribute("data-type")?this.delayedScripts.defer.push(e):this.delayedScripts.normal.push(e):this.delayedScripts.normal.push(e)})}_runAllDelayedCSS(){document.querySelectorAll("link[rel=fvmdelay]").forEach(e=>{e.setAttribute("rel","stylesheet")})}async _transformScript(e){return await this._requestAnimFrame(),new Promise(t=>{const n=document.createElement("script");let r;[...e.attributes].forEach(e=>{let t=e.nodeName;"type"!==t&&("data-type"===t&&(t="type",r=e.nodeValue),n.setAttribute(t,e.nodeValue))}),e.hasAttribute("src")?(n.addEventListener("load",t),n.addEventListener("error",t)):(n.text=e.text,t()),e.parentNode.replaceChild(n,e)})}async _loadScriptsFromList(e){const t=e.shift();return t?(await this._transformScript(t),this._loadScriptsFromList(e)):Promise.resolve()}_delayEventListeners(){let e={};function t(t,n){!function(t){function n(n){return e[t].eventsToRewrite.indexOf(n)>=0?"wpr-"+n:n}e[t]||(e[t]={originalFunctions:{add:t.addEventListener,remove:t.removeEventListener},eventsToRewrite:[]},t.addEventListener=function(){arguments[0]=n(arguments[0]),e[t].originalFunctions.add.apply(t,arguments)},t.removeEventListener=function(){arguments[0]=n(arguments[0]),e[t].originalFunctions.remove.apply(t,arguments)})}(t),e[t].eventsToRewrite.push(n)}function n(e,t){let n=e[t];Object.defineProperty(e,t,{get:()=>n||function(){},set(r){e["wpr"+t]=n=r}})}t(document,"DOMContentLoaded"),t(window,"DOMContentLoaded"),t(window,"load"),t(window,"pageshow"),t(document,"readystatechange"),n(document,"onreadystatechange"),n(window,"onload"),n(window,"onpageshow")}_delayJQueryReady(e){let t=window.jQuery;Object.defineProperty(window,"jQuery",{get:()=>t,set(n){if(n&&n.fn&&!e.allJQueries.includes(n)){n.fn.ready=n.fn.init.prototype.ready=function(t){e.domReadyFired?t.bind(document)(n):document.addEventListener("DOMContentLoaded2",()=>t.bind(document)(n))};const t=n.fn.on;n.fn.on=n.fn.init.prototype.on=function(){if(this[0]===window){function e(e){return e.split(" ").map(e=>"load"===e||0===e.indexOf("load.")?"wpr-jquery-load":e).join(" ")}"string"==typeof arguments[0]||arguments[0]instanceof String?arguments[0]=e(arguments[0]):"object"==typeof arguments[0]&&Object.keys(arguments[0]).forEach(t=>{delete Object.assign(arguments[0],{[e(t)]:arguments[0][t]})[t]})}return t.apply(this,arguments),this},e.allJQueries.push(n)}t=n}})}async _triggerDOMContentLoaded(){this.domReadyFired=!0,await this._requestAnimFrame(),document.dispatchEvent(new Event("DOMContentLoaded2")),await this._requestAnimFrame(),window.dispatchEvent(new Event("DOMContentLoaded2")),await this._requestAnimFrame(),document.dispatchEvent(new Event("wpr-readystatechange")),await this._requestAnimFrame(),document.wpronreadystatechange&&document.wpronreadystatechange()}
11async _triggerWindowLoad(){await this._requestAnimFrame(),window.dispatchEvent(new Event("wpr-load")),await this._requestAnimFrame(),window.wpronload&&window.wpronload(),await this._requestAnimFrame(),this.allJQueries.forEach(e=>e(window).trigger("wpr-jquery-load")),window.dispatchEvent(new Event("wpr-pageshow")),await this._requestAnimFrame(),window.wpronpageshow&&window.wpronpageshow()}_handleDocumentWrite(){const e=new Map;document.write=document.writeln=function(t){const n=document.currentScript,r=document.createRange(),i=n.parentElement;let a=e.get(n);void 0===a&&(a=n.nextSibling,e.set(n,a));const s=document.createDocumentFragment();r.setStart(s,0),s.appendChild(r.createContextualFragment(t)),i.insertBefore(s,a)}}async _requestAnimFrame(){return new Promise(e=>requestAnimationFrame(e))}static run(){const e=new FVMLoader(["keydown","mousemove","touchmove","touchstart","touchend","wheel"]);e._addUserInteractionListener(e)}}FVMLoader.run();</script>
11 12 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 13 14 15 16 17<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 18 19 20 <title>How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ — Jasom Dotnet</title> 21 <link rel="canonical" href="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" /> 22 <meta property="og:locale" content="en_US" /> 23 <meta property="og:type" content="article" /> 24 <meta property="og:title" content="How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ — Jasom Dotnet" /> 25 <meta property="og:description" content="Dev versions of modules aren’t minor versioned, they are always current. If you need specific dev version you’d have to download it from git by a date. Latest Geocoder dev release is broken Geocoder is a module with the latest stable release from 27 Aug 2012, therefore I use dev version. Update from 07 Jan […]" /> 26 <meta property="og:url" content="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" /> 27 <meta property="og:site_name" content="Jasom Dotnet" /> 28 <meta property="article:published_time" content="2016-01-11T08:51:37+00:00" /> 29 <meta property="article:modified_time" content="2019-09-14T08:49:52+00:00" /> 30 <meta property="og:image" content="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg" /> 31 <meta property="og:image:width" content="1000" /> 32 <meta property="og:image:height" content="625" /> 33 <meta property="og:image:type" content="image/jpeg" /> 34 <meta name="author" content="jasom" /> 35 <meta name="twitter:card" content="summary_large_image" /> 36 <meta name="twitter:creator" content="@jasomdotnet" /> 37 <meta name="twitter:site" content="@jasomdotnet" /> 38 <meta name="twitter:label1" content="Written by" /> 39 <meta name="twitter:data1" content="jasom" /> 40 <meta name="twitter:label2" content="Est. reading time" /> 41 <meta name="twitter:data2" content="4 minutes" /> 42
42<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#article","isPartOf":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"},"author":{"name":"jasom","@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"headline":"How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ","datePublished":"2016-01-11T08:51:37+00:00","dateModified":"2019-09-14T08:49:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"},"wordCount":702,"commentCount":0,"publisher":{"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"image":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","keywords":["Drush","Git","Modules"],"articleSection":["Drupal"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/","url":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/","name":"How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ — Jasom Dotnet","isPartOf":{"@id":"https:\/\/www.jasom.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"image":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","datePublished":"2016-01-11T08:51:37+00:00","dateModified":"2019-09-14T08:49:52+00:00","breadcrumb":{"@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#primaryimage","url":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","contentUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2016\/01\/specific-dev-version-drupal-module-front.jpg","width":1000,"height":625},{"@type":"BreadcrumbList","@id":"https:\/\/www.jasom.net\/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.jasom.net\/"},{"@type":"ListItem","position":2,"name":"How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ"}]},{"@type":"WebSite","@id":"https:\/\/www.jasom.net\/#website","url":"https:\/\/www.jasom.net\/","name":"Jasom Dotnet","description":"Webcraftsman","publisher":{"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jasom.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.jasom.net\/#\/schema\/person\/149323688c09014404b080c2cb464790","name":"jasom","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","url":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","contentUrl":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg","width":384,"height":384,"caption":"jasom"},"logo":{"@id":"https:\/\/www.jasom.net\/wp-content\/uploads\/2019\/07\/me_square.jpg"},"description":"I know how to code. At least some basics :D","sameAs":["https:\/\/www.jasom.net\/","https:\/\/x.com\/jasomdotnet","https:\/\/www.youtube.com\/user\/jasomnet"]}]}</script>
42 43 44 45 46<link rel="alternate" type="application/rss+xml" title="Jasom Dotnet » Feed" href="https://www.jasom.net/feed/" /> 47<link rel="alternate" type="application/rss+xml" title="Jasom Dotnet » Comments Feed" href="https://www.jasom.net/comments/feed/" /> 48<style id="wp-img-auto-sizes-contain-inline-css" media="all">img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}</style> 49<style id="wp-block-library-inline-css" media="all">:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
49--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}</style> 50<style id="wp-block-image-inline-css" media="all">.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgb(90 90 90 / .25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgb(90 90 90 / .25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgb(90 90 90 / .25);border:none}.wp-lightbox-overlay{box-sizing:border-box;
50cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}
50@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}</style> 51<style id="wp-block-code-inline-css" media="all">.wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:break-spaces}</style> 52 53<style id="classic-theme-styles-inline-css" media="all">/*! This file is auto-generated */ 54.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}</style> 55 56<style id="global-styles-inline-css" media="all">:root{--wp--preset--aspect-ratio--square:1;--wp--preset--aspect-ratio--4-3:4/3;--wp--preset--aspect-ratio--3-4:3/4;--wp--preset--aspect-ratio--3-2:3/2;--wp--preset--aspect-ratio--2-3:2/3;--wp--preset--aspect-ratio--16-9:16/9;--wp--preset--aspect-ratio--9-16:9/16;--wp--preset--color--black:#000000;--wp--preset--color--cyan-bluish-gray:#abb8c3;--wp--preset--color--white:#ffffff;--wp--preset--color--pale-pink:#f78da7;--wp--preset--color--vivid-red:#cf2e2e;--wp--preset--color--luminous-vivid-orange:#ff6900;--wp--preset--color--luminous-vivid-amber:#fcb900;--wp--preset--color--light-green-cyan:#7bdcb5;--wp--preset--color--vivid-green-cyan:#00d084;--wp--preset--color--pale-cyan-blue:#8ed1fc;
56--wp--preset--color--vivid-cyan-blue:#0693e3;--wp--preset--color--vivid-purple:#9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple:linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan:linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange:linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red:linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray:linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum:linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple:linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux:linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk:linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean:linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass:linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight:linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small:13px;--wp--preset--font-size--medium:20px;--wp--preset--font-size--large:36px;--wp--preset--font-size--x-large:42px;--wp--preset--spacing--20:0.44rem;--wp--preset--spacing--30:0.67rem;--wp--preset--spacing--40:1rem;--wp--preset--spacing--50:1.5rem;--wp--preset--spacing--60:2.25rem;--wp--preset--spacing--70:3.38rem;--wp--preset--spacing--80:5.06rem;--wp--preset--shadow--natural:6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep:12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp:6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined:6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp:6px 6px 0px rgb(0, 0, 0)}.wp-block-button{--wp--preset--dimension--25:25%;--wp--preset--dimension--50:50%;--wp--preset--dimension--75:75%;--wp--preset--dimension--100:100%}:where(body){margin:0}:where(.is-layout-flex){gap:.5em}:where(.is-layout-grid){gap:.5em}body .is-layout-flex{display:flex}.is-layout-flex{flex-wrap:wrap;align-items:center}.is-layout-flex>:is(*,div){margin:0}body .is-layout-grid{display:grid}.is-layout-grid>:is(*,div){margin:0}body{padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}:root :where(.wp-element-button,.wp-block-button__link){background-color:#32373c;border-width:0;color:#fff;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;padding-top:calc(0.667em + 2px);padding-right:calc(1.333em + 2px);padding-bottom:calc(0.667em + 2px);padding-left:calc(1.333em + 2px);text-decoration:none;text-transform:inherit}.has-black-color{color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-color{color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-color{color:var(--wp--preset--color--white)!important}.has-pale-pink-color{color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-color{color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-color{color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-color{color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-color{color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-color{color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-color{color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-color{color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-color{color:var(--wp--preset--color--vivid-purple)!important}.has-black-background-color{background-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-background-color{background-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-background-color{background-color:var(--wp--preset--color--white)!important}.has-pale-pink-background-color{background-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-background-color{background-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-background-color{background-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-background-color{background-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-background-color{background-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-background-color{background-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-background-color{background-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-background-color{background-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-background-color{background-color:var(--wp--preset--color--vivid-purple)!important}.has-black-border-color{border-color:var(--wp--preset--color--black)!important}.has-cyan-bluish-gray-border-color{border-color:var(--wp--preset--color--cyan-bluish-gray)!important}.has-white-border-color{border-color:var(--wp--preset--color--white)!important}.has-pale-pink-border-color{border-color:var(--wp--preset--color--pale-pink)!important}.has-vivid-red-border-color{border-color:var(--wp--preset--color--vivid-red)!important}.has-luminous-vivid-orange-border-color{border-color:var(--wp--preset--color--luminous-vivid-orange)!important}.has-luminous-vivid-amber-border-color{border-color:var(--wp--preset--color--luminous-vivid-amber)!important}.has-light-green-cyan-border-color{border-color:var(--wp--preset--color--light-green-cyan)!important}.has-vivid-green-cyan-border-color{border-color:var(--wp--preset--color--vivid-green-cyan)!important}.has-pale-cyan-blue-border-color{border-color:var(--wp--preset--color--pale-cyan-blue)!important}.has-vivid-cyan-blue-border-color{border-color:var(--wp--preset--color--vivid-cyan-blue)!important}.has-vivid-purple-border-color{border-color:var(--wp--preset--color--vivid-purple)!important}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background:var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple)!important}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background:var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan)!important}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange)!important}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background:var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red)!important}
56.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background:var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray)!important}.has-cool-to-warm-spectrum-gradient-background{background:var(--wp--preset--gradient--cool-to-warm-spectrum)!important}.has-blush-light-purple-gradient-background{background:var(--wp--preset--gradient--blush-light-purple)!important}.has-blush-bordeaux-gradient-background{background:var(--wp--preset--gradient--blush-bordeaux)!important}.has-luminous-dusk-gradient-background{background:var(--wp--preset--gradient--luminous-dusk)!important}.has-pale-ocean-gradient-background{background:var(--wp--preset--gradient--pale-ocean)!important}.has-electric-grass-gradient-background{background:var(--wp--preset--gradient--electric-grass)!important}.has-midnight-gradient-background{background:var(--wp--preset--gradient--midnight)!important}.has-small-font-size{font-size:var(--wp--preset--font-size--small)!important}.has-medium-font-size{font-size:var(--wp--preset--font-size--medium)!important}.has-large-font-size{font-size:var(--wp--preset--font-size--large)!important}.has-x-large-font-size{font-size:var(--wp--preset--font-size--x-large)!important}</style> 57 58<link rel='stylesheet' id='mkaz-code-syntax-prism-css-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css1634d4dce8e447e2c70cd0166c761ba9940e6c34d2e9692825788b6db6095.css' media='all' /> 59<link rel='stylesheet' id='wp-block-paragraph-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc7d4732ca9c1511ef3c1f60ee22e1ebc2985905d2521c502e211e29a88714.css' media='all' /> 60<link rel='stylesheet' id='wp-block-heading-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssb0b5ded471bb79b105d847c63a7e8426bc82d4c9e4caa6e3cdcd1307d7a41.css' media='all' /> 61<link rel='stylesheet' id='wp-block-list-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css29e86ce1442e3eaf51b5c2cadb8f5eb63532c3e60f3353e18aea6976f9d26.css' media='all' /> 62<link rel='stylesheet' id='wp-block-quote-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssc0e2b5a81747928ecfda68e4b767dbb5a4236f3070d862e87849fc80f0564.css' media='all' /> 63<link rel='stylesheet' id='digital-nomad-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-css408638780cced6081b56e3badc186475902f92e43428fb7f74a81f7f66a92.css' media='all' /> 64<style id="digital-nomad-inline-css" media="all">#placeholder{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2048 1536'%3E%3Cfilter id='b'%3E%3CfeGaussianBlur stdDeviation='12' /%3E%3C/filter%3E%3Cpath fill='%239c8872' d='M0 0h2048v1536H0z'/%3E%3Cg filter='url(%23b)' transform='matrix(8 0 0 8 4 4)' fill-opacity='.5'%3E%3Cellipse fill='%23170000' rx='1' ry='1' transform='matrix(74.81414 -1.73659 1.21307 52.26042 65.8 167)'/%3E%3Cellipse fill='%23fff' rx='1' ry='1' transform='rotate(-177.5 125 40.2) scale(137.18797 35.34812)'/%3E%3Cpath fill='%23a56121' d='M54 105h136v57H54z'/%3E%3Cpath fill='%23fff' d='M178 184l54-14-40-29z'/%3E%3Cellipse fill='%23271300' cx='32' cy='183' rx='104' ry='48'/%3E%3Cellipse fill='%23541e00' rx='1' ry='1' transform='rotate(32.9 -163.1 517.3) scale(25.9513 85.08599)'/%3E%3Cellipse fill='%23d0cbc2' rx='1' ry='1' transform='matrix(226.00608 -21.96163 1.64121 16.88962 152.5 8.2)'/%3E%3Cellipse fill='%23cdeaf9' rx='1' ry='1' transform='matrix(51.58271 6.18875 -1.951 16.26137 0 80.8)'/%3E%3C/g%3E%3C/svg%3E")}#header{background-image:url(https://www.jasom.net/wp-content/uploads/2023/09/goodbay_n_welcome_ceremony.jpg)}@media (min-width:480px){#header{background-image:url(https://www.jasom.net/wp-content/uploads/2023/09/goodbay_n_welcome_ceremony.jpg)}}.inner_content,#respond,.comment-body{max-width:56rem}</style> 65 66<link rel='stylesheet' id='child-css' href='https://www.jasom.net/wp-content/cache/fvm/min/1789975772-cssa0643b4e3ad9323ceb09416f88ee34fa695b9d321cf83b1dc8749f7265f4d.css' media='all' /> 67 68 <style media="all">.logo{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 384'%3E%3Cfilter id='b'%3E%3CfeGaussianBlur stdDeviation='12' /%3E%3C/filter%3E%3Cpath fill='%2397765b' d='M0 0h384v384H0z'/%3E%3Cg filter='url(%23b)' transform='matrix(1.5 0 0 1.5 .8 .8)' fill-opacity='.5'%3E%3Cpath fill='%23fff' d='M39 120L0 271h145z'/%3E%3Cellipse cx='148' cy='20' rx='255' ry='49'/%3E%3Cellipse fill='%23ffbe80' cx='150' cy='159' rx='32' ry='134'/%3E%3Cellipse fill='%23000a19' rx='1' ry='1' transform='matrix(-57.13598 -44.47915 17.47528 -22.44799 235.4 136.8)'/%3E%3Cellipse fill='%23000014' cx='88' cy='87' rx='38' ry='41'/%3E%3Cellipse fill='%23ff8a32' rx='1' ry='1' transform='matrix(-45.09286 19.79438 -24.50284 -55.81902 201.8 207.7)'/%3E%3Cellipse fill='%23fff' cx='64' cy='230' rx='42' ry='50'/%3E%3Cellipse fill='%23fff' rx='1' ry='1' transform='matrix(-9.60004 16.95877 -26.01349 -14.72576 149.3 131.8)'/%3E%3Cellipse fill='%23ff6210' rx='1' ry='1' transform='matrix(-42.60371 -32.459 19.96961 -26.2109 110 166.5)'/%3E%3Cellipse fill='%235cffff' rx='1' ry='1' transform='matrix(19.54455 -21.78275 14.30236 12.83278 241.2 89.4)'/%3E%3C/g%3E%3C/svg%3E")}</style> 69 70<link rel="icon" href="https://www.jasom.net/wp-content/uploads/2019/07/me_square-300x300.jpg" sizes="192x192" /> 71 72 73 </head> 74 75 <body class="wp-singular post-template-default single single-post postid-21 single-format-standard wp-custom-logo wp-theme-digital-nomad wp-child-theme-child"> 76 <a class="skip-link screen-reader-text" href="#content">Skip to content</a> 77 <header id="placeholder" class="basic_bg"> 78 <div id="header" class="basic_bg"> 79 <div id="headelements"> 80 <div id="cell"> 81 <div class="inner_content"> 82 <div class="stabilize header_text text_shadow"> 83 <div class="main_header_block"> 84 85<a href="https://www.jasom.net" rel="home" class="logo_link"> 86 87 88 <img src="https://www.jasom.net/wp-content/uploads/2019/07/me_square.jpg" alt="Jasom Dotnet - Webcraftsman" title="Jasom Dotnet - Webcraftsman" class="logo"> 89 90 91</a> 92<div class="textwidget custom-html-widget">I'm a web <a href="https://stackoverflow.com/users/2195238/jasom-dotnet" target="_blank" rel="nofollow">developer</a> with focus on WordPress, website performance and online marketing. I maintain <a href="https://www.jasom.net/digital-nomad-wordpress-theme/">Digital Nomad WordPress theme</a>. In Slovakia I occasionally write for <a href="https://www.ointernete.sk/" target="_blank">Ointernete.sk</a> technology news. My <a href="https://www.jasom.net/yellow-hat/">
92podcast</a> is called Yellow Hat. Read my <a href="https://www.jasom.net/archive/">blog</a> or <a href="https://www.jasom.net/contact/">contact</a> me.</div> </div> 93 <noscript id="general">Some features may not work without JavaScript</noscript> 94 </div> 95 </div> 96 </div> 97 </div> 98 </div> 99 </header> 100 101 <section id="main"> 102 <div id="content" class="digitalnomad_post_container post-21 post type-post status-publish format-standard has-post-thumbnail hentry category-drupal tag-drush tag-git tag-modules"> 103 <article id="singular-21" class="post-21 post type-post status-publish format-standard has-post-thumbnail hentry category-drupal tag-drush tag-git tag-modules"> 104 <img width="1000" height="625" src="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg" class="feature_image wp-post-image" alt="How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ" title="How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ" decoding="async" fetchpriority="high" srcset="https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front.jpg 1000w, https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front-300x188.jpg 300w, https://www.jasom.net/wp-content/uploads/2016/01/specific-dev-version-drupal-module-front-768x480.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /> 105 <div class="inner_content"> 106 107 108 <header> 109 <div class="post_time main_time time_permalink"><a href="https://www.jasom.net/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/" title="Permalink for: How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ"><time class="published" datetime="2016-01-11T08:51:37+00:00">January 11, 2016</time>, <span class="last_update_text">updated:</span> <time class="updated" datetime="2019-09-14T10:49:52+00:00">September 14, 2019</time></a></div> 110 <h1 class="post_title main_title">How to download specific dev version of drupal module? Simply using âgit checkoutâ or âdrush makeâ</h1> 111 112 <div class="post_category"><a href="https://www.jasom.net/blog/drupal/" rel="category tag">Drupal</a> (<span class="post_tags"><a href="https://www.jasom.net/tags/drush/" rel="tag">Drush</a>, <a href="https://www.jasom.net/tags/git/" rel="tag">Git</a>, <a href="https://www.jasom.net/tags/modules/" rel="tag">Modules</a></span>)</div> 113 114 </header> 115 116 <div class="post_content"> 117 118 119 120<p class="wp-block-paragraph">Dev versions of modules aren’t minor versioned, they are always current. If you need specific dev version you’d have to download it from git by a date.</p> 121 122 123 124<h2 class="wp-block-heading">Latest Geocoder dev release is broken</h2> 125 126 127 128<p class="wp-block-paragraph"><a href="https://www.drupal.org/project/geocoder" target="_blank" rel="noopener noreferrer">Geocoder</a> is a module with the latest stable release from 27 Aug 2012, therefore I use dev version. Update from 07 Jan 2016 <a href="https://www.drupal.org/node/2647536" target="_blank" title="Latest dev release breaks Google geocoder (2016-Jan-07)" rel="noopener noreferrer">broke</a> some key features. The question is: <em>How can I download a previously working snapshot</em>?</p> 129 130 131 132<p class="wp-block-paragraph">It’s possible to do it using 2 methods:</p> 133 134 135 136<ol class="wp-block-list"><li>â<em>git checkout</em>â â preferred</li><li>â<em>drush make</em>â â more easier when you are not familiar with git</li></ol> 137 138 139 140<h2 class="wp-block-heading">How to find commit hash?</h2> 141 142 143 144<p class="wp-block-paragraph">In both cases you will need commit hash (2ffd3fa8b22c11100516bf801bc08ba729cc8a68):</p> 145 146 147 148<ul class="wp-block-list"><li>Go to â<a href="https://www.drupal.org/node/1294050/commits" target="_blank" title=" Commits for Geocoder" rel="noopener noreferrer">View commits</a>â (located in the right sidebar on the project page).</li><li>You will see a list of various dates, the commits. In my case I see <em>1 commit from 07 Jan 2016</em>, <em>6 commits from 6 Jan 2016</em>, <em>5 commits from 20 Nov 2015</em>, <em>1 commit from 30 Sept 2015</em> etc. Click on the last commit from 20 Nov 2015.</li><li>You will be redirected to the <a href="https://www.drupal.org/commitlog/commit/27950/2ffd3fa8b22c11100516bf801bc08ba729cc8a68" target="_blank" rel="noopener noreferrer">page with the commit hash</a>.</li></ul> 149 150 151 152<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="1000" height="625" src="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module.jpg" alt="" class="wp-image-205" srcset="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module.jpg 1000w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-300x188.jpg 300w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-768x480.jpg 768w" sizes="(max-width: 1000px) 100v
152w, 1000px" /></figure></div> 153 154 155 156<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="1000" height="291" src="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1.jpg" alt="" class="wp-image-206" srcset="https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1.jpg 1000w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1-300x87.jpg 300w, https://www.jasom.net/wp-content/uploads/2019/09/specific-dev-version-drupal-module-1-768x223.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption>Drupal module commit hash</figcaption></figure></div> 157 158 159 160<h2 class="wp-block-heading">1. âgit checkoutâ method</h2> 161 162 163 164<p class="wp-block-paragraph">If you are not familiar with drupal git, start with <a href="https://www.drupal.org/documentation/git" target="_blank" title="Drupal Git" rel="noopener noreferrer">this</a> documentation ð or watch <a href="https://vimeo.com/20459209" target="_blank" title="Using Git on Drupal.org - Randy Fay" rel="noopener noreferrer">this</a> super explaining video.</p> 165 166 167 168<p class="wp-block-paragraph">If you are familiar with git, type this into a shell:</p> 169 170 171 172<pre class="wp-block-code"><code lang="bash" class="language-bash">git clone --branch 7.x-1.x https://git.drupal.org/project/geocoder.git 173cd geocoder 174git checkout c994066d58bc7518bc9796c60d4d43f98ae477cd .</code></pre> 175 176 177 178<h3 class="wp-block-heading">Explanation</h3> 179 180 181 182<ul class="wp-block-list"><li><code>git clone</code> â you will find entire command with your-module-specific url on the project page under tab the â<a title="Gecocoder git instructions" rel="noopener noreferrer" href="https://www.drupal.org/project/geocoder/git-instructions" target="_blank">Version control</a>â</li><li><code>cd geocoder</code> â git will download files into the folder âgeocoderâ so go there</li><li><code>cd geocoder hash .</code> â will retrieve a date specific version of the module. <strong>Don’t forget to add dot (â.â) in the end.</strong></li></ul> 183 184 185 186<p class="wp-block-paragraph"><strong>Desired dev version of the Geocoder module is located in <em>“geocoder</em>” folder, now.</strong></p> 187 188 189 190<h2 class="wp-block-heading">2. âdrush makeâ method</h2> 191 192 193 194<p class="wp-block-paragraph">What’s â<a href="http://www.drush.org/en/master/make/" target="_blank" title="Drush make" rel="noopener noreferrer">drush make</a>â command? This is from official documentation:</p> 195 196 197 198<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Drush make is an extension to drush that can create a ready-to-use drupal site, pulling sources from various locations. It does this by parsing a flat text file (similar to a drupal .info file) and downloading the sources it describes.</p></blockquote> 199 200 201 202<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=MFUlOLwREaY" target="_blank" title=" Using Drush Make" rel="noopener noreferrer">Here</a> is a very well made video briefly explaining how the “<em>drush make</em>” works. Video is tied to <a href="https://stonebergdesign.com/blog/using-drush-make-building-base-drupal-installation-through-automation" target="_blank" rel="noopener noreferrer">this</a> Jared’s article.</p> 203 204 205 206<p class="wp-block-paragraph">In drush â<code>*.make file</code>â is defined which modules, which versions and which sources (git) you wish to use. This is sample of <code>myMakeFile.make</code> file I have used to retrieve specific dev version of Geocoder (November 20, 2015) from the git:</p> 207 208 209 210<pre class="wp-block-code"><code lang="bash" class="language-bash">api = 2 211core = 7.x 212projects[drupal][version] = 7.12 213projects[geocoder][version] = "1.x-dev" 214projects[geocoder][download][type] = "git" 215projects[geocoder][download][url] = "https://git.drupal.org/project/geocoder.git" 216projects[geocoder][download][revision] = "2ffd3fa8b22c11100516bf801bc08ba729cc8a68"</code></pre> 217 218 219 220<h3 class="wp-block-heading">Explanation</h3> 221 222 223 224<ul class="wp-block-list"><li>I don’t know what <code>api = 2</code> is ð</li><li><em>core</em> specifies a drupal version you wish to work with like 7.x, 8.x, 9.x</li><li><code>projects[drupal][version]</code> specifies release of the Drupal you are going to download. I just copy it from <a title="Full example drupal-org.make file" rel="noopener noreferrer" href="https://www.drupal.org/node/1432374" target="_blank">this</a> page. It will download Drupal 7.12. It’s not important for the purpose of the tutorial.</li><li><code>projects[geocoder][version]</code> says I want to download dev version of the Geocoder project.</li><li><code>projects[geocoder][download][type]</code><em> </em>I’m going to download it from a drupal git</li><li><code>projects[geocoder][download][url]</code> git address. You can find your one on the project page under tab â<a rel="noopener noreferrer" href="https://www.drupal.org/project/geocoder/git-instructions" target="_blank">Version control</a>â as I already mentioned.</li><li><code>projects[geocoder][download][revision]</code> hash says which commit should be the last one in the version you are going to download. I have mentioned above how to obtain this hash.</li></ul> 225 226 227 228<p class="wp-block-paragraph">You have a drush, you have a make file and now let’s run it:</p> 229 230 231 232<pre class="wp-block-code"><code lang="bash" class="language-bash">cd 233mkdir removeMeWhenDone 234cd removeMeWhenDone 235drush make /path/to/myMakeFile.make -y</code></pre> 236 237 238 239<h3 class="wp-block-heading">Explanation</h3> 240 241 242 243<ul class="wp-block-list"><li><code>cd</code> will place you into the home folder</li><li><code>mkdir removeMeWhenDone</code> creates a temporary folder where the files will be downloaded</li><li><code>cd removeMeWhenDone</code> â go to that tmp folder</li><li><code>drush make /path/to/myMakeFile.make -y</code> runs the make file. â<code>-y</code>
243â says â<code>yes</code>â to all question Drush may have.</li></ul> 244 245 246 247<p class="wp-block-paragraph"><strong>Desired dev version of the Geocoder module is located in </strong><code>~/removeMeWhenDone/sites/all/modules</code><strong>, now.</strong></p> 248 249 250 251<h2 class="wp-block-heading">Do I really have a proper version?</h2> 252 253 254 255<p class="wp-block-paragraph">How to check if you have a good version:</p> 256 257 258 259<ul class="wp-block-list"><li>Open the patch for the next commit (<a rel="noopener noreferrer" href="https://www.drupal.org/commitlog/commit/27950/b95eb8f2b072ae4170076d8c6c4683f0db20096e" target="_blank">first one from 06 Jan 2016</a> in my case) and find some unique string (â<em>Helper function to compare 2 arrays recursively.</em>â was added).</li><li>It shouldn’t be present in the downloaded version (version from 20 Nov 2015 in my case).</li><li>You can find the â<em>unique string</em>â in the patch attached to the issue page linked from the â<em>hash</em>â page (page with the commit hash).</li><li>Download some dev version from 06 Jan 2016 (or 07 Jan 2016), and try to search for the “<em>unique string</em>” within the module files. It should be present.</li></ul> 260 261 262 263<p class="wp-block-paragraph">That’s it, you have learned how to download specific dev version of Drupal module using 2 methods â â<em>drush make</em>â and â<em>git checkout</em>â.</p> 264 265 266 </div> 267 268 269 270 </div> 271 272 273 <div class="outher_respond"> <div id="respond" class="comment-respond"> 274 <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/how-to-download-specific-dev-version-of-drupal-module-simply-using-git-checkout-or-drush-make/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://www.jasom.net/wp-comments-post.php" method="post" id="commentform" class="comment-form"><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p> 275<input type="hidden" class="tysi" name="tysi" value="" /> 276<p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p> 277<p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p> 278<p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p> 279<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p> 280<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='21' id='comment_post_ID' /> 281<input type='hidden' name='comment_parent' id='comment_parent' value='0' /> 282</p></form> </div> 283 </div> 284 285 <nav class="post_nav single-no"><div class="preview_content basic_bg" style="background-image: url('https://www.jasom.net/wp-content/uploads/2019/10/php_elephant_pink_photo_by_pixabay_com-1024x547.jpg');"><a href="https://www.jasom.net/php-prepare-sanitize-transliterate-convert-change-user-string-input-for-filename-or-url-address/" title="Previous post: PHP: Prepare (sanitize, transliterate, convert, change) user string (input) for filename or url address" class="post_nav_link post_nav_prev text_shadow" rel="prev"><div class="preview_inside">« PHP: Prepare (sanitize, transliterate, convert, change) user string (input) for filename or url address</div></a></div><div class="preview_content basic_bg" style="background-image: url('https://www.jasom.net/wp-content/uploads/2019/09/dumbier_trip_2018-1.jpg');"><a href="https://www.jasom.net/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-16-04-server/" title="Next post: How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 16.04 Server" class="post_nav_link post_nav_next text_shadow" rel="next"><div class="preview_inside">How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 16.04 Server »</div></a></div></nav></article> </div> 286</section> 287<footer id="footer" class="basic_bg"> 288 289 <div id="footer_inside" class="text_shadow"> 290 <span id="spinner"></span> 291 <p> 292 2026 © Jasom Dotnet. 293 Powered by <a href="https://wordpress.org/" target="_blank">WordPress</a>. Themed by <a href="https://www.jasom.net" target="_blank">Jasom Dotnet</a>. </p> 294 </div> 295 296</footer> 297 298 <noscript id="deferred-styles"> 299 <style> 300 #footer {background-image: url('https://www.jasom.net/wp-content/uploads/2023/09/line_between_Europe_and_Asia-1024x576.jpg');} 301 @media (min-width: 480px) {#footer {background-image: url('https://www.jasom.net/wp-content/uploads/2023/09/line_between_Europe_and_Asia.jpg');}} 302 </style> 303 </noscript> 304
304<script type="speculationrules"> 305{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/child/*","/wp-content/themes/digital-nomad/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 306</script>
306 307 <a href="#header" class="gp" title="↑ Up">↑ Up</a> 308
308<script id="mkaz-code-syntax-prism-js-js-extra"> 309var prism_settings = {"pluginUrl":"https://www.jasom.net/wp-content/plugins/code-syntax-block/"}; 310//# sourceURL=mkaz-code-syntax-prism-js-js-extra 311</script>
vendor: 1 bytes, line 311
311
312<script id="mkaz-code-syntax-prism-js-js" src="https://www.jasom.net/wp-content/plugins/code-syntax-block/assets/prism/prism.js?ver=1719250798"></script>
vendor: 1 bytes, line 312
312
313<script id="digital-nomad-js" src="https://www.jasom.net/wp-content/themes/digital-nomad/js/main.min.js?ver=1.2.0"></script>
vendor: 1 bytes, line 313
313
314<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="https://www.jasom.net/wp-includes/js/comment-reply.min.js?ver=7.1.2"></script>
314 315 316
316<script> 317 (function () { 318 var formular; 319 formular = document.getElementById('commentform'); 320 if (formular === null) { 321 formular = document.getElementsByClassName('wpcf7-form'); 322 } 323 window.addEventListener('load', function () { 324 var xhr = new XMLHttpRequest(); 325 xhr.open('POST', 'https://www.jasom.net/wp-admin/admin-ajax.php', true); 326 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 327 xhr.onload = function () { 328 // Process our return data 329 if (xhr.status >= 200 && xhr.status < 300 && xhr.readyState === 4) { 330 //What do when the request is successful 331 var ck = xhr.responseText; 332 if (ck) { 333 var x = document.getElementsByClassName('tysi'); 334 for (var i = 0; i < x.length; i++) { 335 x[i].value = ck; 336 } 337 } else { 338 console.log('No CK in response'); 339 formular.innerHTML = '<p>You are not eligible to submit this form.</p>'; 340 return; 341 } 342 } else { 343 // What do when the request fails 344 formular.innerHTML = '<p>Due to technical difficulties site does not receive new form submissions.</p>'; 345 console.log('AJAX request failed. Returned status is ' + xhr.status + '. That\'s all we know.'); 346 } 347 }; 348 var msg = { 349 action: 'aas_visit', 350 fk: 1 351 }; 352 xhr.send(endodeForPost(msg)); 353 }); 354 355 function endodeForPost(object) { 356 var encodedString = ''; 357 for (var prop in object) { 358 if (object.hasOwnProperty(prop)) { 359 if (encodedString.length > 0) { 360 encodedString += '&'; 361 } 362 encodedString += encodeURI(prop + '=' + object[prop]); 363 } 364 } 365 return encodedString; 366 } 367 }()); 368 </script>
368 369 370
371<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8f330f365fef4832bd7a4c88557b3b14","r":1,"spa":2}' crossorigin="anonymous"></script>
371 372</body> 373</html> 374<!-- Cached page generated by WP-Super-Cache on 2026-09-24 21:51:57 --> 375 376<!-- Compression = gzip -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.